PDA

Просмотр полной версии : Цветовые схемы для программ


Вырубатель
24.01.2013, 23:26
И так Здравствуйте с вами Вырубатель и сегодня я вам покажу и расскажу как сделать цветовые схемы для своего софта
и открываем Microsoft Visual Studio 2010
создаем проект далее клацаем по проекту правой кнопкой мыши и выбираем добавить и создать элемент называем класс Setting.cs
и клацаем ок в открывшимся окне между скобками пишем
public static string comboB1;
всё теперь на форму добавляем 3 button-а и 3 label-а
и 1 menuStrip1 клацаем menuStrip1 правой кнопкой мыши потом выбрать и выбираем ComboBox1 далее переходим в колекции ComboBox1 и пишем Золотой и Красный потом переходим к коду формы и пишем
using System.IO; после
public Form1()
{
InitializeComponent();
}
вставляем
private void save_params()
{
StreamWriter writer = new StreamWriter(Directory.GetCurrentDirectory() + @"\Seting.ini");
writer.WriteLine(toolStripComboBox1.Text);
writer.Close();
}
теперь в событие
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{

}
вставляем
save_params();
потом в событие
private void Form1_Load(object sender, EventArgs e)
{

}
вставляем
StreamReader reader = new StreamReader(Directory.GetCurrentDirectory() + @"\Seting.ini");
Setting.comboB1 = reader.ReadLine();
Form1_Enter(sender, e);
reader.Close();
потом в событие
private void Form1_Enter(object sender, EventArgs e)
{

}
вставляем
toolStripComboBox1.Text = Setting.comboB1;
теперь в событие
private void toolStripComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{

}
вставляем
if (toolStripComboBox1.Text == "Золотой")
{
label1.ForeColor = label2.ForeColor = label3.ForeColor = Color.Gold;
button1.FlatAppearance.BorderColor = button2.FlatAppearance.BorderColor =
button3.FlatAppearance.BorderColor = Color.Gold;
button1.ForeColor = button2.ForeColor = button3.ForeColor = Color.Gold;
toolStripComboBox1.ForeColor = Color.Gold;
}

if (toolStripComboBox1.Text == "Красный")
{
label1.ForeColor = label2.ForeColor = label3.ForeColor = Color.Red;
button1.FlatAppearance.BorderColor = button2.FlatAppearance.BorderColor =
button3.FlatAppearance.BorderColor = Color.Red;
button1.ForeColor = button2.ForeColor = button3.ForeColor = Color.Red;
toolStripComboBox1.ForeColor = Color.Red;
ну вот и всё
проект во вложение

Yukikaze
24.01.2013, 23:50
Неправильно тему назвал, надо было назвать "Сборник анти-паттернов"

Вырубатель
25.01.2013, 00:35
"Сборник анти-паттернов"
почему так

Yukikaze
25.01.2013, 00:38
Потому что, данный "мануал" показывает как делать не стоит

Вырубатель
25.01.2013, 00:42
ну если я что то не так сделал объясни что не так

Yukikaze
25.01.2013, 01:07
ну тогда начну с начала
после
public partial class Form1 : Form
вставляем

public class Configure
{
private System.Drawing.Color Pub_tbox;
public System.Drawing.Color tbox;
}
В приведенном классе нет ни методов, ни свойств, ни конструктора, но при этом поле Pub_tbox приватное, следовательно его нельзя изменить. И вообще этот класс нигде не используется.

В общем, весь код это одна большая архитектурная ошибка, но больше всего доставили следующие строки

if (toolStripComboBox1.Text == "Золотой")
{
label1.ForeColor = label2.ForeColor = label3.ForeColor = Color.Gold;
button1.FlatAppearance.BorderColor = button2.FlatAppearance.BorderColor =
button3.FlatAppearance.BorderColor = Color.Gold;
button1.ForeColor = button2.ForeColor = button3.ForeColor = Color.Gold;
toolStripComboBox1.ForeColor = Color.Gold;
}

if (toolStripComboBox1.Text == "Красный")
{
label1.ForeColor = label2.ForeColor = label3.ForeColor = Color.Red;
button1.FlatAppearance.BorderColor = button2.FlatAppearance.BorderColor =
button3.FlatAppearance.BorderColor = Color.Red;
button1.ForeColor = button2.ForeColor = button3.ForeColor = Color.Red;
toolStripComboBox1.ForeColor = Color.Red;
Это что получается, если мне захотелось создать новую цветовую схему то придется ее еще раз закопипастить сюда? А если у меня больше контролов, мне что, при каждом добавлении нового контрола на форму нужно его копипастить в каждый блок if? Если так, то мне нужно срочно усыновить негритянского ребенка, ибо сам я этой фигней заниматься не буду.

Вырубатель
25.01.2013, 01:23
А какой вариант посоветовал бы ты как лучше сделать

Yukikaze
25.01.2013, 01:38
Самое простое это создать класс описывающий цветовую схему, добавить экстеншен метод классу Control что бы получилось что-то вроде
control.ApplyColorScheme(ColorScheme)
В итоге можно будет пробежать по всем контролам циклом и применить к ним цветовую схему. А саму цветовую схему можно сериализировать в любой человекопонятный(или нет) вид, например XML/JSON

Вырубатель
25.01.2013, 01:44
можешь пример сделать ?

Yukikaze
25.01.2013, 01:55
Могу, но не буду, думай сам что тебе нужно для класса цветовой схемы, какие там должны быть поля.
Гугли extension method/методы расширения
Гугли сериализацию, что бы можно было настройки в файл сохранить
Считай это домашней работой, как сделаешь обновишь статью, а я если что подскажу где можно/нужно исправить

the-boxi
05.02.2013, 09:55
Могу, но не буду, думай сам что тебе нужно для класса цветовой схемы, какие там должны быть поля.
Гугли extension method/методы расширения
Гугли сериализацию, что бы можно было настройки в файл сохранить
Считай это домашней работой, как сделаешь обновишь статью, а я если что подскажу где можно/нужно исправить
Кому это нужно? Лучше всего сtrl+c и ctrl+v и все :3
VisualStyler решит проблему наверное(искать в расширениях среды)