我目前正在尝试制作类似电影院的预订应用。我在处理预订时遇到了一些问题,因为我创建了一个5x5网格的按钮,这些按钮调用了一个单独的窗口。在该窗口中,您可以输入要查看的名称和电影。之后,按钮应以不同颜色着色,以表明此地点已被保留。
我能够生成按钮,每个按钮都会调用一个新窗口。但是,我似乎无法弄清楚如何将名称和电影信息传回按钮进行配置。另外,我创建它们的方式并不是我所有按钮的颜色,因为它们基本上都是"相同"宾语?非常感谢任何帮助。
代码Buttongrid:
public partial class Filmgrid : Window
{
public Filmgrid()
{
InitializeComponent();
int width = 5;
int height = 5;
for (int i = 0; i < width; i++)
{
var rowDefinition = new RowDefinition();
grid.RowDefinitions.Add(rowDefinition);
}
for (int y = 0; y < height; y++)
{
var columnDefinition = new ColumnDefinition();
grid.ColumnDefinitions.Add(columnDefinition);
}
for (int i = 0; i < width; i++)
{
for (int y = 0; y < height; y++)
{
ResButton b = new ResButton(); //selfmade buttons
grid.Children.Add(b);
Grid.SetColumn(b, i);
Grid.SetRow(b, y);
}
}
}
}
Code ResButton:
public partial class ResButton : UserControl
{
public ResButton()
{
InitializeComponent();
}
private void button_Click(object sender, RoutedEventArgs e)
{
ResWindow ResWindow = new ResWindow();
ResWindow.Show();
}
}
Code ResWindow:
public partial class ResWindow : Window
{
public ResWindow()
{
InitializeComponent();
}
private void btnCancel_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
private void btnSave_Click(object sender, RoutedEventArgs e)
{
//send Data to Filmgrid Window to change button
this.Close();
}
}
答案 0 :(得分:0)
但是,我似乎无法弄清楚如何将名称和电影信息传回按钮进行配置。
作为快速解决方法,您可以使用相应的信息在ResWindow
上创建公共属性:
public partial class ResWindow : Window {
public string PersonName {get; set;}
public string MovieName {get; set;}
public ResWindow() => InitializeComponent();
private void btnCancel_Click(object sender, RoutedEventArgs e) => this.Close();
private void btnSave_Click(object sender, RoutedEventArgs e) {
PersonName = txbPersonName.Text;
MovieName = txbMovieName.Text;
this.Close();
}
}
然后,在ResButton
中,您可以处理Window
的Closing
事件,并在窗口关闭之前检索数据:
public partial class ResButton : UserControl {
public ResButton() => InitializeComponent();
private void button_Click(object sender, RoutedEventArgs e) {
ResButton btn = sender as ResButton;
ResWindow ResWindow = new ResWindow();
ResWindow.Closing += (s1, e1) => {
ResWindow win = s1 as ResWindow;
//do something here with ResWindow.PersonName and ResWindow.MovieName
//you can access the btn variable here as well
};
ResWindow.Show();
}
}
另外,我的所有按钮都不会像我创建它们那样着色,因为它们基本上都是&#34;相同&#34;对象
不,因为每次拨打new ResButton();
时,您都会创建一个新的ResButton
。如果您的问题是您没有办法引用每个ResButton
,则有两种解决方案:
.NET中的约定是事件处理程序的第一个参数是引发事件的对象。在这种情况下,Click
事件的第一个参数将是单击的按钮。
或者,您可以保留对您在List<T>
窗口中声明的某种Dictionary<TKey,TValue>
或Filmgrid
中的所有按钮的引用。