实施大量事件的更有效方法

时间:2016-08-12 07:25:38

标签: c# wpf

我是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,但我无法管理它。任何帮助都将受到高度赞赏

3 个答案:

答案 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);
}