我是Visual C#的新手,我正在实现一个WPF应用程序,但我想使用一种更有效的方式来处理事件,因为我为每个工具都有另一种方法。
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
KeyUp(textBox1, e);
}
private void textBox2_KeyUp(object sender, KeyEventArgs e)
{
KeyUp(textBox2, e);
}
private void textBox3_KeyUp(object sender, KeyEventArgs e)
{
KeyUp(textBox3, e);
}
private void textBox4_KeyUp(object sender, KeyEventArgs e)
{
KeyUp(textBox4, e);
}
private void textBox5_KeyUp(object sender, KeyEventArgs e)
{
KeyUp(textBox5, e);
}
private void TextChanged(int x, TextBox txt)
{
int i = dataGridView1.CurrentCell.RowIndex;
dataGridView1.Rows[i].Cells[x].Value = txt.Text;
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
TextChanged(1, textBox2);
}
private void textBox3_TextChanged_1(object sender, EventArgs e)
{
TextChanged(2, textBox3);
}
private void textBox4_TextChanged(object sender, EventArgs e)
{
TextChanged(3, textBox4);
}
private void textBox5_TextChanged_1(object sender, EventArgs e)
{
TextChanged(4, textBox5);
}
等等。我没有占用那么多线路,而是为所有这些事件寻找一种更短的方式。好像我必须使用Mapping,但我无法管理它。任何帮助都将受到高度赞赏
答案 0 :(得分:1)
您可以为所有文本框键盘事件使用一个事件处理程序,如下所示;
private void textBox_KeyUp(object sender, KeyEventArgs e)
{
KeyUp((TextBox)sender, e);
}
一旦你明白了,就可以对其余的事件使用相同的逻辑。
答案 1 :(得分:1)
你需要两个事件处理程序(你知道它们是可重用的)
首先:
private void OnTextBoxKeyUp(object sender, KeyEventArgs e)
{
KeyUp((Textbox)sender, e);
}
第二
private void OnTextChanged(object sender, EventArgs e)
{
var textBox = (Textbox)sender;
var i = dataGridView1.CurrentCell.RowIndex;
var x = (int)textbox.Tag
dataGridView1.Rows[i].Cells[x].Value = textBox.Text;
}
对于第二部分,您需要在代码中设置FrameworkElement.Tag
属性,如下所示:
<Textbox Tag="1" />
为了完整起见,这里是文本框的xaml部分:
<Textbox x:Name="textBox1" Tag="1" TextChanged="OnTextChanged" KeyUp="OnTextBoxKeyUp"/>
<Textbox x:Name="textBox2" Tag="2" TextChanged="OnTextChanged" KeyUp="OnTextBoxKeyUp"/>
等等。请注意,可能不需要x:Name
部分,因为您不需要使用此解决方案在后面的代码中按名称引用文本框。
答案 2 :(得分:0)
首先将您的文本框名称设为
TextBox1,TextBox2,TextBox3 ...并为所有文本框添加一个通用的textBoxAll_TextChanged
事件处理程序。
然后执行以下代码:
private void textBoxAll_TextChanged(object sender, EventArgs e)
{
var tb = sender as TextBox;
int x = int.Parse(tb.Name.Substring(7,1)) - 1;
TextChanged(x, tb);
}