C# 使用返回值调用public void和private string方法
在我的应用程序中,我想让我的主formForm1在我的UserControlEmailControl上调用一个方法。下面是我想调用的三种主要方法:C# 使用返回值调用public void和private string方法,c#,winforms,C#,Winforms,在我的应用程序中,我想让我的主formForm1在我的UserControlEmailControl上调用一个方法。下面是我想调用的三种主要方法: public void InitializeConnection(string hostname, int port) { try { _imapClient = new TcpClient(hostname, port); _imapNs = _imapClie
public void InitializeConnection(string hostname, int port)
{
try
{
_imapClient = new TcpClient(hostname, port);
_imapNs = _imapClient.GetStream();
_imapSw = new StreamWriter(_imapNs);
_imapSr = new StreamReader(_imapNs);
label1.Text = "*** Connected ***";
Response();
}
catch (SocketException ex)
{
Console.WriteLine(ex.Message);
}
}
,
及
为此,我在usercontrol页面上使用了以下命令:
Form1.getemail += new Form1.sendtoemail(this.sendover);
及
那么在我的主页上我有
public delegate void sendtoemail(object sender, EventArgs e);
public event sendtoemail getemail;
及
完成此操作后,在我的usercontrol页面上,它告诉我sendover匹配委托sendtoemail没有重载,并且我需要一个对象引用。到底是什么引发了错误?您的方法发送不尊重sendtoemail委托的方法签名:
public delegate void sendtoemail(object sender, EventArgs e); // accepts 2 parameters
代替方法声明:
public void sendover() { // ...
。。。宣布它为
public void sendover(object sender, EventArgs e) { // ...
getemail事件的类型为sendtoemail,因此作为处理程序添加的函数必须与该签名匹配
以下是两种解决方案:
改变
public void sendover()
到
或改变
Form1.getemail += new Form1.sendtoemail(this.sendover);
到
第一个解决方案更改sendover的签名以匹配委托类型,第二个解决方案创建了一个具有正确类型的匿名函数来调用sendover。这看起来很像WinForms…抱歉,现在将更改它。太棒了,因此修复了一个错误。。。但是,它仍然在Form1.getemail下面加了下划线,并表示非静态字段、方法或属性“Form1.getemail”需要对象引用。这意味着Form1是表单的类型,而不是表单的实例。
public void sendover() { // ...
public void sendover(object sender, EventArgs e) { // ...
public void sendover()
public void sendover(object sender, EventArgs e)
Form1.getemail += new Form1.sendtoemail(this.sendover);
Form1.getemail += (s, e) => sendover();