在 c#、asp.net 4.0、VS2015 中,我创建了一个用户控件,它只是一个下拉列表,其中包含一些用户可以传递给它的其他属性,以及一个事件和委托。当下拉列表更改时,将触发 OnSelectedIndexChanged,然后检查事件是否已填充并调用委托。
定义如下所示:
public partial class SiteList : System.Web.UI.UserControl
{
public event SiteIDChangedHandler SiteIDChanged;
public delegate void SiteIDChangedHandler(object sender, EventArgs e);
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,当使用该用户控件并附加事件时,在 .aspx 页面中工作时,不会在 Visual Studio 中创建委托的定义。例如,当我输入以下内容时
<CW:SiteList runat="server" ID="SiteList" OnSiteIDChanged=""
Run Code Online (Sandbox Code Playgroud)
并点击 OnSiteIDChanged 的 = 符号,然后它说“创建新事件”作为 OnSiteIDChanged 的选项,就像我在 .net 中使用的任何其他事件一样。当我选择“CreateNewEvent”时,在后面的代码中创建的方法是:
protected void SiteList_SiteIDChanged()
{
}
Run Code Online (Sandbox Code Playgroud)
并且不包含处理程序的正确签名。
现在奇怪的是,如果我在后面的代码中绑定事件: SiteList.SiteIDChanged +=
它说“按(TAB)插入”,插入的方法是:
private void SiteList_SiteIDChanged1(object sender, EventArgs e)
{
throw new NotImplementedException();
}
Run Code Online (Sandbox Code Playgroud)
那么我错过了什么,以便使用发送者创建正确的方法签名,并且 eventargs 自动在第一个实例中?我知道这是可以做到的,所有的 .net 控件都可以做到!
我是一名 .NET 人员,正在深入研究 C++/微控制器领域。
以下是我正在尝试做的事情的模型。我有一个传入值的方法,并且根据该值我想返回一个不同的硬编码字符串数组。
当我单步执行此操作时,我的函数main()似乎可以工作,并且看起来我正在函数中返回正确的类型。我可以设置一个断点并查看files[0]是否是预期的字符串,files[1]是否是预期的字符串等。我可以单步执行循环并设置监视,files[i]然后我会看到适当的字符串。那里一切都很好。
那么两个问题:如何获取数组中有多少个元素?看了一百万个帖子,看来我做不到,对吧?我是否只需要一些在循环时需要检查的结束字符串(例如空字符串)?
其次,你会注意到我已经注释掉printf()了。当我启用该功能后,在单步执行后printf(),它会更改字符串的内容,但我不明白为什么要这样做。查看逐步执行之前/之后的图像以及手表的结果。我认为这可能是因为字符串没有以 a 隐式终止\0,但这没有效果。
#include <cstdlib>
#include <cstdio>
const char** GetSoundCategory(int category)
{
const char* FILES1[3] = {
"/myfile1.mp3",
"/this_is_my_file.mp3",
"/myfile9.mp3"
};
const char* FILES2[2] = {
"/I love S.E.mp3",
"/please_help_me.mp3"
};
const char** ptr = nullptr;
switch (category)
{
case 1:
ptr = FILES1;
break;
case 2:
ptr = FILES2;
break;
}
return ptr;
}
int main()
{
const …Run Code Online (Sandbox Code Playgroud)