C#控制事件的触发方式

C#控制事件的触发方式,c#,event-handling,C#,Event Handling,我有一个问题: 我有一个两个按钮,单击一次调用XmlHelper类中的CreateTelegram()函数。 该函数创建一个Xml并将其发送到服务器。 如果服务器响应(xml),则会触发一个事件。 现在,如果XML元素returnCode=0,我将把Textfield Backcolor属性编辑为绿色 如何获取触发事件的控件(按钮1或按钮2) 这是我的代码: 按钮1: private void btnCheckId_Click(object sender, EventArgs e) { xm

我有一个问题: 我有一个两个按钮,单击一次调用XmlHelper类中的CreateTelegram()函数。 该函数创建一个Xml并将其发送到服务器。 如果服务器响应(xml),则会触发一个事件。 现在,如果XML元素returnCode=0,我将把Textfield Backcolor属性编辑为绿色

如何获取触发事件的控件(按钮1或按钮2)

这是我的代码:

按钮1:

private void btnCheckId_Click(object sender, EventArgs e)
{
  xmlHelper.CreateTelegram(configSettings, txtIdCheck.Text);
}
private void btnCheckId2_Click(object sender, EventArgs e)
{
  xmlHelper.CreateTelegram(configSettings, txtIdCheck2.Text);
}
 public void CreateTelegram(ConfigSettings configSettings, string Identifier)
    {
      XmlWriterSettings settings = new XmlWriterSettings();
      settings.Indent = true;
      settings.IndentChars = ("    ");
      settings.CloseOutput = true;
      //settings.OmitXmlDeclaration = true;
      using (StringWriter sw = new StringWriter())
      {
        using (XmlWriter writer = XmlWriter.Create(sw, settings))
        {

         xml Stuff..

        }
        
        string partTelegram = sw.ToString();

        SendTelegramm(partTelegram , configSettings.serverAddress, configSettings.serverPort);
      }
    }
_connector.DataReceived += new EventHandler<SocketEventArgs<byte[]>>(Connector_DataReceived);
按钮2:

private void btnCheckId_Click(object sender, EventArgs e)
{
  xmlHelper.CreateTelegram(configSettings, txtIdCheck.Text);
}
private void btnCheckId2_Click(object sender, EventArgs e)
{
  xmlHelper.CreateTelegram(configSettings, txtIdCheck2.Text);
}
 public void CreateTelegram(ConfigSettings configSettings, string Identifier)
    {
      XmlWriterSettings settings = new XmlWriterSettings();
      settings.Indent = true;
      settings.IndentChars = ("    ");
      settings.CloseOutput = true;
      //settings.OmitXmlDeclaration = true;
      using (StringWriter sw = new StringWriter())
      {
        using (XmlWriter writer = XmlWriter.Create(sw, settings))
        {

         xml Stuff..

        }
        
        string partTelegram = sw.ToString();

        SendTelegramm(partTelegram , configSettings.serverAddress, configSettings.serverPort);
      }
    }
_connector.DataReceived += new EventHandler<SocketEventArgs<byte[]>>(Connector_DataReceived);
XmlHelper:

private void btnCheckId_Click(object sender, EventArgs e)
{
  xmlHelper.CreateTelegram(configSettings, txtIdCheck.Text);
}
private void btnCheckId2_Click(object sender, EventArgs e)
{
  xmlHelper.CreateTelegram(configSettings, txtIdCheck2.Text);
}
 public void CreateTelegram(ConfigSettings configSettings, string Identifier)
    {
      XmlWriterSettings settings = new XmlWriterSettings();
      settings.Indent = true;
      settings.IndentChars = ("    ");
      settings.CloseOutput = true;
      //settings.OmitXmlDeclaration = true;
      using (StringWriter sw = new StringWriter())
      {
        using (XmlWriter writer = XmlWriter.Create(sw, settings))
        {

         xml Stuff..

        }
        
        string partTelegram = sw.ToString();

        SendTelegramm(partTelegram , configSettings.serverAddress, configSettings.serverPort);
      }
    }
_connector.DataReceived += new EventHandler<SocketEventArgs<byte[]>>(Connector_DataReceived);
活动订阅:

private void btnCheckId_Click(object sender, EventArgs e)
{
  xmlHelper.CreateTelegram(configSettings, txtIdCheck.Text);
}
private void btnCheckId2_Click(object sender, EventArgs e)
{
  xmlHelper.CreateTelegram(configSettings, txtIdCheck2.Text);
}
 public void CreateTelegram(ConfigSettings configSettings, string Identifier)
    {
      XmlWriterSettings settings = new XmlWriterSettings();
      settings.Indent = true;
      settings.IndentChars = ("    ");
      settings.CloseOutput = true;
      //settings.OmitXmlDeclaration = true;
      using (StringWriter sw = new StringWriter())
      {
        using (XmlWriter writer = XmlWriter.Create(sw, settings))
        {

         xml Stuff..

        }
        
        string partTelegram = sw.ToString();

        SendTelegramm(partTelegram , configSettings.serverAddress, configSettings.serverPort);
      }
    }
_connector.DataReceived += new EventHandler<SocketEventArgs<byte[]>>(Connector_DataReceived);
\u connector.DataReceived+=新事件处理程序(connector\u DataReceived);
连接器的数据接收功能

   private void Connector_DataReceived(object sender, SocketEventArgs<byte[]> e)
    {
      if (e == null || e.Repository == null)
        return;
      if (_currentMsg != null)
      {
        {
          try
          {
            _currentMsg.ResponseMessage = new XmlMessage(EvaluateReceivedData(e.Repository), false);
          }
          catch (Exception ex)
          {
            ShowTextThreadProc(ex.Message + Environment.NewLine + ex.StackTrace);
          }
          return;
        }
      }
      EvaluateReceivedData(e.Repository);
    }


private string EvaluateReceivedData(byte[] data)
{
  int offset = (int)this._connector.Offset;
  if (data == null || data.Length <= offset)
    return null;
  string msg = Encoding.ASCII.GetString(data, offset, data.Length - offset);

  DisplayMessage(msg);
  return msg;
}

 private void DisplayReceivedData(string text)
    {
      try
      {
        XmlDocument doc = new XmlDocument();
        doc.Load(new StringReader(text));


         int returnCode = Convert.ToInt32(doc.SelectSingleNode("/root/event/result/@returnCode")?.Value ?? "-1");
     
        Debug.WriteLine(returnCode );

        if (returnCode == 0)
        {
          ...GET THE SENDER and edit the BackColor...
        }


      }
      catch (Exception ex)
      {
        MessageBox.Show(ex.Message);
      }
      finally 
      {
        Disconnect();
      }
    }
private void Connector\u数据已接收(对象发送方,SocketEventArgs e)
{
if(e==null | | e.Repository==null)
返回;
如果(_currentMsg!=null)
{
{
尝试
{
_currentMsg.ResponseMessage=newXMLMessage(EvaluateReceivedData(e.Repository)),false;
}
捕获(例外情况除外)
{
ShowTextThreadProc(ex.Message+Environment.NewLine+ex.StackTrace);
}
返回;
}
}
评估接收到的数据(如存储库);
}
专用字符串EvaluateReceivedData(字节[]数据)
{
int offset=(int)this.\u connector.offset;

如果(data==null | | data.Length您可以强制转换
sender
参数:

private void btnCheckId_Click(object sender, EventArgs e)
{
    Button clickedButton = (Button)sender;
    if (clickedButton == Button1)
    { ... }
}

享受这个10年历史的复制品:对不起,我有两个不同的按钮。我编辑了代码哦,对不起,按钮不一样。问题是datareceived函数中的问题。我如何才能找到单击的按钮?你是指最后一个单击的按钮吗?存储对它的引用。或者,
\u connector.datareceived
如何连接到按钮单击…?是的上次单击的按钮。如果接收到来自服务器的数据,Datareceived将触发。因此,将
clickedButton
存储在类中的一个字段中:
private Button\u clickedButton;
好的。我想我必须使用事件,但存储单击的按钮是正确的方法吗?