C # - использование ColorDialog через формы - PullRequest
3 голосов
/ 18 августа 2011

У меня есть приложение Windows Form.В основной форме пользователь вводит номер элемента и т. Д., А затем нажимает кнопку, которая открывает новую форму (либо небольшую, либо большую форму в зависимости от флажка).Теперь в моем главном приложении у меня есть меню файла, в котором есть настройки, изменить цвет фона.Это открывает colordialog.Если пользователь ничего не выбирает, цвета фона останутся по умолчанию.Однако, если они меняют его в основной форме ввода, я изменяю фон нескольких текстовых полей - код ниже.

private void warning1ToolStripMenuItem_Click(object sender, EventArgs e)
{
    colorDialog1.ShowDialog();
    Warn1Color = colorDialog1.Color.ToString();
    if (Warn1Color != null)
    {
        tbWarn1Hrs.BackColor = colorDialog1.Color;
        tbWarn1Mins.BackColor = colorDialog1.Color;
        tbWarn1Secs.BackColor = colorDialog1.Color;
        tbWarn1Msg.BackColor = colorDialog1.Color;
    }
}

Теперь моя проблема заключается в том, как мне получить это, чтобы затем изменить фон в другой форме, котораяоткрывается.Я надеялся, что смогу передать строку в новом конструкторе формы, как я это сделал с рядом других значений.

т.е. - вот мой код в новой форме .... (примечание - строка Warn1Color былапередается в конструктор и затем делается = в строку _Warn1Color. Если это значение равно null, то фон будет желтым по умолчанию, но не может преобразовать строку типа в system.drawing.color. Кто-нибудь видит простое решение этого или что я мог бы сделатьзаставить это работать легко.

if (_Warn1Color == null)
{
    this.BackColor = System.Drawing.Color.Yellow;
}
else
    this.BackColor = _Warn1Color;

Ответы [ 3 ]

1 голос
/ 18 августа 2011

Передайте Цвет через Конструктор, а не строку.Если это не возможно по какой-либо причине, вы можете создать ColorConfigClass, который содержит требуемый цвет, и вы можете установить его при использовании.

0 голосов
/ 18 августа 2011

Вы должны создать статический класс для хранения ваших данных конфигурации, таких как этот цветовой стиль. Затем вы можете установить это значение, как только вы запросите у пользователя изменения, и вы также можете вызвать значение Color из любой другой формы, когда вам нужно его использовать.

Ваш статический класс должен выглядеть примерно так ...

public static class StyleSettings{
   private static Color _warn1Color = Color.FromArgb(255, 0, 0);//default colour
   public static Color Warn1Color {
      get { return _warn1Color; }
      set { _warn1Color = value; }
   }
}

Тогда вы можете использовать это в вашем примере метода, как ...

private void warning1ToolStripMenuItem_Click(object sender, EventArgs e)
{
    if (colorDialog1.ShowDialog() == DialogResult.OK)
    {
        StyleSettings.Warn1Color = colorDialog1.Color;

        tbWarn1Hrs.BackColor = StyleSettings.Warn1Color;
        tbWarn1Mins.BackColor = StyleSettings.Warn1Color;
        tbWarn1Secs.BackColor = StyleSettings.Warn1Color;
        tbWarn1Msg.BackColor = StyleSettings.Warn1Color;
    }
}
0 голосов
/ 18 августа 2011

Я предполагаю, что вы использовали строку, потому что хотели иметь возможность передавать значение null, а System.Drawing.Color, являющийся структурой, не может иметь значение null.

В этом случае либо используйте Nullable (http://msdn.microsoft.com/en-us/library/b3h38hb0%28v=vs.80%29.aspx), который может быть нулевым, либо вы можете рассматривать какое-то другое значение как «значение по умолчанию», скажем, alpha = 0.

Чтобы передать значение в конструкторе, просто перейдите в файл кода для формы (тот, в котором вы кодируете материал для событий) и найдите функцию конструктора (с тем же именем, что и у формы), например ::

namespace MyApp
{
    public partial class MyForm : Form
    {
        public MyForm()
        {
            InitializeComponent();
        }
        ...

И добавить к нему параметры:

namespace MyApp
{
    public partial class MyForm : Form
    {
        public MyForm(System.drawing.color background)
        {
            InitializeComponent();
            ...do whatever you want with background...
        }
        ...

Конечно, вам также нужно отредактировать места, где вы создаете эту форму, например, изменить

form = new MyForm();
form.Show();

до

form = new MyForm(backgroundColour);
form.Show();
...