C# C按钮单击和取消单击操作

C# C按钮单击和取消单击操作,c#,winforms,C#,Winforms,我有一个Buttonname:open端口,当它单击执行以下代码时: private void button1_Click(object sender, EventArgs e) { try { if (!serialPort1.IsOpen) { serialPort1.Open(); } else { Message

我有一个Buttonname:open端口,当它单击执行以下代码时:

private void button1_Click(object sender, EventArgs e)     
{
   try
   {
      if (!serialPort1.IsOpen)
      {    
          serialPort1.Open();                         
      }
      else
      {
         MessageBox.Show("Port is Open by other party!");    
      }   
   }
   catch (UnauthorizedAccessException ex)
   {
      MessageBox.Show(ex.Message);
   }
}
我想做的是:

按钮保持单击,其名称更改为关闭端口 我按下它,希望它执行以下代码:

serialPort1.Close();
Form1 myForm = new Form1();
this.Close();

您能帮助我吗?

如果您只需要一个按钮来切换端口的打开和关闭,则只需执行以下操作即可:

private void button1_Click(object sender, EventArgs e)     
{
  try
  {
    if (!serialPort1.IsOpen)
    {    
      serialPort1.Open();
      this.button1.Text = "Close Port";                   
    }
    else
    {
      serialPort1.Close();
      this.button1.Text = "Open Port";  
    }   
  }
  catch (UnauthorizedAccessException ex)
  {
    MessageBox.Show(ex.Message);
  }
}
至于额外代码:

Form1 myForm = new Form1();
this.Close();

Form1的这个新实例一旦超出范围就会被释放,关闭此表单意味着您不再有任何UI。

在winform中,最接近切换按钮的是使用必须添加到ToolStrip的ToolStripButton

将ToolStripButton.CheckOnClick设置为true,然后对ToolStripButton.CheckStateChangeEvent进行编码

private void toolStripButton1_CheckStateChanged(object sender, EventArgs e)
{
    // Checked means it's clicked
    if (toolStripButton1.Checked)
    {
        if (!serialPort1.IsOpen)
        {
            serialPort1.Open();
            toolStripButton1.Text = "Close Port";
        }
    }
    else
    {
        if (serialPort1.IsOpen())
        {
            serialPort1.Close();
            toolStripButton1.Text = "Open Port";
        }
    }
}

这是WPF或Win表单还是其他形式?为什么需要创建新表单?已经打开的有什么问题?您可以在try/catch中添加finally,在if/else之后将action2添加到try语句中有问题吗?非常感谢,我现在要完成我的项目,我想打开windows资源管理器并选择一个文本,然后将其放入文本框中,这对我来说很好,但是,如果我没有选择一个文件,它表明我的错误空路径名是不合法的,我应该怎么做来解决这个问题?OpenFileDialog of=新建OpenFileDialog;of.ShowDialog;StreamReader sr=新的StreamReaderof.FileName;richTextBox1.Text=sr.ReadToEnd;正如错误所说,路径名不能为空。确保已设置.FileName或其他一些路径属性。另外,别忘了如果答案有助于解决您的问题,您应该单击向上/向下投票箭头下方的接受复选标记。谢谢,伙计,我知道这个问题,我将向我的导师演示,正如您所看到的,我们可以复制/粘贴输入,或者,如果我们存储为文本,我们可以直接访问它。因此,如果我打开windows资源管理器,但我没有选择任何文件,我希望显示一个messagebox,而不是程序停止调试,我如何编写它@哦,很抱歉打扰你,但是在接下来的7天里我不能问任何问题:如果我理解你想要什么,听起来你只需要在尝试打开它之前检查一下文件名。如果字符串文件名为空或不存在,或者您有任何其他参数,则显示消息框,否则打开该文件。