所以我正在理解事件和代表.
我完全理解代表的用法.关于委托的唯一问题是代理是否可以配置为以任何方式使用与事件无关的函数... 如果是,我如何为委托定义的函数编写逻辑?(我想这个功能并没有太多意义,但知道它很好.)
至于事件......我很难理解它.我认为事件是在代码中发生某些事情时执行的函数.但是,我没有得到创建活动的过程.部分.
对于这个问题,我将使用Gary Willoughby的答案:https://stackoverflow.com/a/803528/1104766 它是在我试图理解整个主题的问题上发布的.
我在上面的示例中没有得到的结果:
MyObject.OnMaximum += new MyEventHandler(MaximumReached);
首先,如何创建委托实例,并在需要2时只传递1个变量?必须有一些我缺少
的东西...... 关于这一行的第二件事是,new ...()实例被添加到OnMaximum驻留在MyObject其中的实例中MyClass- 如果可以完成这样的事情究竟是OnMaximum什么?它从来没有真正定义过!
if(OnMaximum != null) {
OnMaximum(this, new MyEventArgs("You've entered " +
value.ToString() +
", but the maximum is " +
Maximum.ToString()));
}
Run Code Online (Sandbox Code Playgroud)
至于这部分,OnMaximum被调用,但它的逻辑从未真正定义在代码中的任何地方,那么结果会是什么呢?显然我猜它是"你输入............."的文字,但我的问题是更具体,功能/事件收到的值真正发生了什么?
为了清楚起见,我在BOLD中标记了所有问题.
PS,我知道这个问题一般都已发布过几次.
请注意,此特定问题是指其他成员撰写的答案,此处提出的问题仅适用于此示例.这就是为什么谷歌没有真正找到这样的答案的原因.
尽管如此,我在发布之前就进行了搜索,但我确实试图理解,但我想这些例子是我了解某些内容的最佳方式,尤其是当我对英语CS词汇的知识缺乏时.
在C#中(至少使用.NET,但我认为它是通用的),您可以创建如下事件:了解C#中的事件和事件处理程序.
C++有类似的机制吗?
PS:我从来没有喜欢过信号/插槽系统,所以请不要建议,因为我已经在使用它,并希望切换到别的东西.
我一直在阅读这篇MSDN文章和这个问题,试图理解.NET中的事件.不幸的是,它没有点击我,我遇到了很多麻烦.我正在尝试将这项技术整合到我的项目中,但收效甚微.
基本上,我有这个类会读数字.每当遇到一个新号码时,我希望它触发一个名为numberChanged的事件.
所以,我设置了我的活动public event EventHandler numberChanged;.稍后,当我遇到一个与前一个数字不同的数字时,我会触发它.
if(currentNumber != previousNumber){
if(numberChanged != null){
numberChanged(this, new EventArgs());
}
}
Run Code Online (Sandbox Code Playgroud)
但后来我遇到了麻烦'subcibing'这个事件.如果我这样做numberChanged += [something to do here]错误,说numberChanged是一个事件而不是一个类型.
我的解释是否足够明确,可以提供一些建议?非常感谢.
我的表单有大约20个文本框控件,我想激发Text_Changed事件,而不是为每个单独的文本框添加事件.有没有办法循环文本框来触发此事件?我想要做的是在文本更改时清除标签控件.我没有显示消息框,而是使用标签控件来显示消息.我还设置了如果文本框包含无效数据的地方,我选择所有文本并将焦点放在该文本框中,这样当用户重新输入信息时,标签控件就会清除消息.
编辑:
为了解决一些困惑,这里是我的验证方法中的一些代码
if (txtBentLeadsQty.Text == "")
{
//ValidData = true;
BentLeadsCount = 0;
}
else
{
if (int.TryParse(txtBentLeadsQty.Text.Trim(), out BentLeadsCount))
ValidData = true;
else
{
ValidData = false;
lblError.Text = "Bent Lead Qty must be a numeric value";
txtBentLeadsQty.SelectAll();
txtBentLeadsQty.Focus();
}
}
Run Code Online (Sandbox Code Playgroud)
我已经有办法检查数值,并且我输入代码来选择输入的所有文本,如果值不是数字则给予焦点,我只想在文本更改时清除标签控件如果用户点击退格键或开始输入错误发生的原因,我会突出显示该文本框中的所有文本(如果它无效).如果我在每个文本框TextChanged事件中放置代码,我可以这样做,但是为了保存编码,我想知道是否有办法清除标签控件,如果任何文本框从我的验证方法抛出错误而不是添加单个事件20个文本框.注意:并非所有文本框都会输入数据,这些是我放入代码的数量文本框,如果文本框为null,则为变量赋值0.
我正在试图弄清楚调度计时器是如何工作的,所以我可以将它实现到我的程序中,我按照网站上的确切说明查找堆栈溢出的答案.人们说他们的问题是固定的,但我的代码非常相似,它不会工作......
错误是:
"timer_Tick"没有重载与委托"EventHandler <object>"相匹配
我能做什么?
public MainPage()
{
this.InitializeComponent();
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += timer_Tick;
timer.Start();
}
void timer_Tick(EventArgs e)
{
TimeRefresh();
}
Run Code Online (Sandbox Code Playgroud) "VisibleChanged"事件是什么意思?
例如,在此行的代码中:
slidePane.VisibleChanged += new EventHandler(slidePane_VisibleChanged);
Run Code Online (Sandbox Code Playgroud)