Как поменять цвет фона формы из другой формы, не при помощи кнопки, а, например,через RichTextBox то есть пишешь цвет и меняется на заданный?
Asked
Active
Viewed 1,516 times
0
3 Answers
1
Например, на WPF делается очень просто.
XAML:
<Grid Background="{Binding Text, ElementName=TB}">
<TextBox HorizontalAlignment="Center" VerticalAlignment="Center" Width="100" Name="TB"/>
</Grid>
Результат:
Если вам в реальности нужно два окна, свяжите их через общий DataContext:
// https://ru.stackoverflow.com/a/632894/10105
class VM : INotifyPropertyChanged
{
string colorName;
public string ColorName
{
get => colorName;
set => Set(ref colorName, value);
}
protected bool Set<T>(ref T field, T value, [CallerMemberName] string propertyName = null)
{
if (EqualityComparer<T>.Default.Equals(field, value))
return false;
field = value;
NotifyPropertyChanged(propertyName);
return true;
}
protected void NotifyPropertyChanged([CallerMemberName] string propertyName = null) =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
public event PropertyChangedEventHandler PropertyChanged;
}
Теперь в первом окне
<Grid Background="{Binding ColorName}">
</Grid>
и во втором
<TextBox Text="{Binding ColorName, UpdateSourceTrigger=PropertyChanged}"/>
VladD
- 206,799
-
1Спасибо, но я имела в виду из другой формы. Есть две формы: в одной пишешь цвет, а в другой меняет , посредством обычного кода, а не путем разметки – Veronika Apr 03 '18 at 18:05
-
-
@Veronika: Ну так протяните значение через VM, например, делов-то. А почему вам обязательно через код? – VladD Apr 03 '18 at 20:02
-
-
-
0
Подписываетесь на событие TextChanged и в нём пишете следующий код:
private void RichTextBox_TextChanged(object sender, EventArgs e)
{
Color color = Color.FromName(richTextBox.Text);
if (color.IsKnownColor)
form2.BackColor = color;
}
form2 - это ссылка на другую форму.
Alexander Petrov
- 29,233
-
как подписаться на событие TextChanged? Для нестатического поля, метода или свойства "Form.BackColor" требуется ссылка на объект. и еще одна ошибка 'Form2" не содержит определения для "richTextBox2_TextChanged" и не удалось найти метод расширения "richTextBox2_TextChanged", принимающий тип "Form2" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку). – Veronika Apr 04 '18 at 10:54
0
Странная архитектура требует странных решений. Попробуйте во второй форме объявить статическое свойство Queue. В первой форме класть туда, во-второй выбирать. Т.е. пример выше будет:
private void RichTextBox_TextChanged(object sender, EventArgs e)
{
Color color = Color.FromName(richTextBox.Text);
if (color.IsKnownColor)
Form2.QueueBackColor.Enqueue(color);
}
DerSkythe
- 101
-
-
-
Знаете, а лучше всего объявите как public переменную: public static Queue
QueueBackColor = new Queue – DerSkythe Apr 07 '18 at 16:46();

form1.Background = ...;– Андрей NOP Apr 04 '18 at 04:44