我有多个自定义控件,我注意到它们共享同一个事件(自定义)示例:OnMoved等
我现在所做的是,复制&将相同的代码从控件粘贴到控件。
那么,我是否还要编写可以在C#WPF中的所有控件中共享的自定义事件?
我用于所有控件的事件示例:
Point lastPosition = new Point();
Point currentPosition = new Point();
public static void OnMoved(object sender, EventArgs e)
{
currentPosition.X = Canvas.GetLeft(explorer);
currentPosition.Y = Canvas.GetTop(explorer);
// didn't moved
if (currentPosition.X == lastPosition.X || currentPosition.Y == lastPosition.Y)
{
return;
}
lastPosition.X = Canvas.GetLeft(explorer);
lastPosition.Y = Canvas.GetTop(explorer);
}
答案 0 :(得分:1)
这取决于您需要事件的确切内容,但您可以将事件放入共享类中:
public class MyEvents
{
public static void SomeEvent(object sender, EventArgs e)
{
MessageBox.Show("hi");
}
}
然后只需从您需要的地方订阅它:
SomeButton.Click += MyEvents.SomeEvent;
答案 1 :(得分:0)
您可以创建具有公共虚拟事件的基类,并且该事件将出现在从基类派生的任何类中。这将使您不必一遍又一遍地复制和粘贴相同的代码。
答案 2 :(得分:0)
是的,你可以! :D你需要出席的唯一事情是:
- >相同的事件(事件的Args必须完全相同。 - >他们也会这样做。
糟糕的是,您无法将控件与事件混合在一起。例如,您可以为按钮创建一个.Click事件,以便关闭您的应用程序,但是如果您希望在按下键的同时执行相同的操作,那么#34; F8"它不会起作用,因为Event参数不同〜
您可以尝试使用在所有活动中制作相同内容的方法。例如:
private void _Close()
{
Process.GetCurrentProcess().Close();
}
你可以关闭" F5"按下表格或按一下按钮或在文本框中打字"关闭"。
button.Click += Button_Close;
private void Button_Close(Object o, RoutedEventArgs e)
{
_Close();
}
this.KeyDown += This_Close;
private void This_Close(Object o, KeyEventArgs e)
{
if(e.KeyCode == Key.F5) _Close();
}
TextBox.TextChanged += Text_Close;
private void Text_Close(Object o, TextChangedEventArgs e)
{
if(TextBox.Text == "Close") _Close();
}