C# 单选按钮无法选择某些内容
我正在尝试创建一个对话框,其中包含3个单选按钮和一个“显示”按钮,用于我们的一些投影仪软件。我想做的是,单击“显示”后,用单选按钮打开一个文件,该文件特定于选择的房间 问题是,单击“显示”后,什么都没有发生 我知道C# 单选按钮无法选择某些内容,c#,visual-studio,C#,Visual Studio,我正在尝试创建一个对话框,其中包含3个单选按钮和一个“显示”按钮,用于我们的一些投影仪软件。我想做的是,单击“显示”后,用单选按钮打开一个文件,该文件特定于选择的房间 问题是,单击“显示”后,什么都没有发生 我知道过程。启动和显示\u单击是正确的;在一个测试项目中,我成功地使用“Present”按钮打开了一个文件。我确信CheckedChanged部分可能不正确,但我不知道如何处理它们 这是我的密码: using System; using System.Collections.
过程。启动和显示\u单击是正确的;在一个测试项目中,我成功地使用“Present”按钮打开了一个文件。我确信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;
}
}
有人能帮我弄一下这些单选按钮吗?你的CheckedChanged事件处理程序肯定是一团糟
在英语中,你的逻辑是
只要单选按钮的选中状态发生更改,请将其选中属性设置为true
老实说,我很惊讶你没有进入一个无限循环,在这个循环中,每个控件都在努力成为“选中的一个”。完全消除这种逻辑可能会很好地解决您的问题。您正在“启动”一个文本文件似乎也很奇怪,但我认为这是有意的
这里的重要知识是,用户单击单选按钮会自动设置Checked
属性。不需要自己在代码隐藏中执行此操作。您的CheckedChanged事件处理程序肯定是一团糟
在英语中,你的逻辑是
只要单选按钮的选中状态发生更改,请将其选中属性设置为true
老实说,我很惊讶你没有进入一个无限循环,在这个循环中,每个控件都在努力成为“选中的一个”。完全消除这种逻辑可能会很好地解决您的问题。您正在“启动”一个文本文件似乎也很奇怪,但我认为这是有意的
这里的重要知识是,用户单击单选按钮会自动设置Checked
属性。不需要自己在代码隐藏中执行此操作。我认为您需要删除在选中或取消选中时触发的事件。如果我理解正确,您只希望在单击“显示”时发生“某些事情”。因此,一旦有人单击“显示”
,然后验证哪些复选框处于打开/关闭状态,并执行适当的操作:
对不起,如果我做出了错误的假设,请随意更正
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");
}
}
}
}
我认为您需要删除在选中或取消选中时触发的事件。如果我理解正确,您只希望在单击“显示”时发生“某些事情”。因此,一旦有人单击“显示”
,然后验证哪些复选框处于打开/关闭状态,并执行适当的操作:
对不起,如果我做出了错误的假设,请随意更正
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");
}
}
}
}
为什么不在代码中放一些try{}catch{}块呢。。还有,当您尝试调试小代码时会发生什么?为什么不在代码中放入一些try{}catch{}块呢。。另外,当您尝试调试小代码时会发生什么情况else实际上更好(虽然技术上不需要),因为它允许评估在找到匹配项时“短路”。@BradleyDotNET假设您只希望在单击“呈现”后发生1个且仅发生1个文件室进程,在这种情况下,只需使用3个按钮:Present1
,Present2
,Present3
。这是不寻常的,因为OP使用了3个复选框,这可能意味着多件事情应该同时发生。他说“单选按钮”(而不是复选框)意味着他只想要一个。也许出于用户体验的原因,他不想要3个按钮。您说如果是复选框,else将破坏该功能,这是正确的。@Vlad谢谢您的回答,我最终使用了您建议的3个按钮。您回答的代码是我原来的代码,但也不起作用。然而,这三个按钮工作得非常好,我只想要单选按钮,以防用户选择了错误的房间。谢谢你的帮助!else实际上更好(虽然技术上不需要),因为它允许评估在找到匹配项时“短路”。@BradleyDotNET假设您只希望在单击“呈现”后发生一个且仅发生一个房间过程,在这种情况下,只需使用3个按钮:Present1
,Present2
,Present3
。这是不寻常的,因为OP使用了3个复选框,这可能意味着多件事情应该同时发生。他说“单选按钮”(而不是复选框)意味着他只想要一个。也许出于用户体验的原因,他不想要3个按钮。您说如果是复选框,else将破坏该功能,这是正确的。@Vlad谢谢您的回答,我最终使用了您建议的3个按钮。您回答的代码是我原来的代码,但也不起作用。然而,这三个按钮工作得非常好,我只想要单选按钮,以防用户选择了错误的房间。谢谢你的帮助!我觉得我的逻辑似乎不正确。。。是的,文本文件“开始”只是为了测试。谢谢你的帮助!我觉得我的逻辑似乎不正确。。。是的,文本文件“开始”只是为了测试。谢谢你的帮助!