我正在尝试创建一个对话框,其中包含3个单选按钮和一个" Present"按钮与我们拥有的一些投影仪软件一起使用。我想要做的是,点击"出现"后,打开一个特定于使用单选按钮选择了哪个房间的文件。
问题是,点击"现在"没有任何反应。
我知道Process.Start
和present_Click
是正确的;在一个测试项目中,我做了#34;现在"按钮成功打开文件。我确信CheckedChanged
部分可能不正确,但我对如何使用它们感到困惑。
这是我的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void present_Click(object sender, EventArgs e)
{
if (room1.Checked)
{
System.Diagnostics.Process.Start(@"room1.txt");
}
else if (room2.Checked)
{
System.Diagnostics.Process.Start(@"room2.txt");
}
else if (room3.Checked)
{
System.Diagnostics.Process.Start(@"room3.txt");
}
}
private void room1_CheckedChanged(object sender, EventArgs e)
{
room1.Checked = true;
}
private void room2_CheckedChanged(object sender, EventArgs e)
{
room2.Checked = true;
}
private void room3_CheckedChanged(object sender, EventArgs e)
{
room3.Checked = true;
}
}
有人可以帮助我使用这些单选按钮吗?
答案 0 :(得分:3)
您的CheckedChanged事件处理程序肯定搞砸了。
用英语说,你的逻辑是
无论何时更改单选按钮的选中状态,请将其checked属性设置为true
老实说,我很惊讶你没有进入一个无限循环,每个控制都在争夺“选定的一个”。完全删除该逻辑可能会解决您的问题。你正在“开始”一个文本文件似乎很奇怪,但我认为这是故意的。
这里的重要知识是用户点击单选按钮会自动设置Checked
属性。没有必要在代码隐藏中自己动手。
答案 1 :(得分:1)
我认为您需要删除在检查或取消选中时触发的事件。如果我理解得当,你只需要'某些东西'单击Present
时发生。因此,一旦有人点击Present
,请验证哪些复选框已开启/关闭并执行相应的操作:
很抱歉,如果我做出了错误的假设,请随时纠正。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void present_Click(object sender, EventArgs e)
{
if (room1.Checked)
{
System.Diagnostics.Process.Start(@"room1.txt");
}
else if (room2.Checked)
{
System.Diagnostics.Process.Start(@"room2.txt");
}
else (room3.Checked)
{
System.Diagnostics.Process.Start(@"room3.txt");
}
}
}
}