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();