C# 获取控制如何触发事件 winforms

C# Get Control how fired the event winforms

我有一个问题: 我有两个按钮和 OnClick,我在 XmlHelper Class 中调用了一个 CreateTelegram() 函数。 该函数创建一个 Xml 并将其发送到服务器。 如果服务器响应 (xml),则触发一个事件。 现在,如果 XML 元素 returnCode = 0,我会将文本字段背景色 属性 编辑为绿色。

如何获取触发事件的控件(Button1 或 Button2)

这里是我的代码:

按钮 1:

private void btnCheckId_Click(object sender, EventArgs e)
{
  xmlHelper.CreateTelegram(configSettings, txtIdCheck.Text);
}

按钮 2:

private void btnCheckId2_Click(object sender, EventArgs e)
{
  xmlHelper.CreateTelegram(configSettings, txtIdCheck2.Text);
}

Xml帮手:

 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);

Connector_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();
      }
    }

您可以转换 sender 参数:

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