C# - использование ColorDialog через формы

У меня есть приложение 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 ответа

Решение

Вы должны создать статический класс для хранения ваших данных конфигурации, таких как этот цветовой стиль. Затем вы можете установить это значение, как только вы запросите у пользователя изменения, и вы также можете вызывать значение 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;
    }
}

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

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

В этом случае либо используйте Nullable ( http://msdn.microsoft.com/en-us/library/b3h38hb0%28v=vs.80%29.aspx), который может быть нулевым, либо вы можете считать какое-то другое значение значением по умолчанию скажем, альфа =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();
Другие вопросы по тегам