Vb.net 如何获得不允许选择的收音机盒?
我在面板顶部有一对单选按钮,可以作为一个单选框使用,基本上没有问题,但我需要用户有两个都不选中的选项,我希望用户选择零或其中一个选项。当窗体显示时,它们都未选中,但在用户选中其中一个后,无法恢复到原始状态。我希望点击所选的广播框会清除它。我模糊地记得我在X/Motif时代的经历,但这似乎没有发生Vb.net 如何获得不允许选择的收音机盒?,vb.net,winforms,Vb.net,Winforms,我在面板顶部有一对单选按钮,可以作为一个单选框使用,基本上没有问题,但我需要用户有两个都不选中的选项,我希望用户选择零或其中一个选项。当窗体显示时,它们都未选中,但在用户选中其中一个后,无法恢复到原始状态。我希望点击所选的广播框会清除它。我模糊地记得我在X/Motif时代的经历,但这似乎没有发生 如何对单选按钮进行编程以允许两个按钮都未选中?或者我应该为此使用其他控件吗?您可以使用复选框,它们可以被选中或取消选中 如果确实要取消选中单选按钮,请使用以下代码: Private Sub RadioB
如何对单选按钮进行编程以允许两个按钮都未选中?或者我应该为此使用其他控件吗?您可以使用复选框,它们可以被选中或取消选中 如果确实要取消选中单选按钮,请使用以下代码:
Private Sub RadioButton1_MouseDown(sender As Object, e As MouseEventArgs) Handles RadioButton1.MouseDown
If RadioButton1.Checked = True Then
Dim thr As New Threading.Thread(AddressOf unticker)
thr.Start()
End If
End Sub
Private Sub unticker()
Threading.Thread.Sleep(100)
Do Until RadioButton1.Checked = False
Invoke(Sub() RadioButton1.Checked = False)
Loop
End Sub
对每个单选按钮单独使用此按钮没有内置方式来完成您的要求。我们自己做这件事并不难。下面是示例代码,它演示了如何做到这一点 C版本:
private void Initialize()
{
radioButton1.AutoCheck = false;
radioButton2.AutoCheck = false;
radioButton1.Click += radioButton_Click;
radioButton2.Click += radioButton_Click;
}
void radioButton_Click(object sender, EventArgs e)
{
RadioButton radio = (RadioButton)sender;
radio.Checked = !radio.Checked;
if (!radio.Checked)
{
return;
}
var otherRadios = radio.Parent
.Controls
.OfType<RadioButton>()
.Where(r => r != radio);
foreach (var r in otherRadios)
{
r.Checked = !radio.Checked;
}
}
Vb.net版本:使用
如果你认为hatke应该很简单。。创建自定义控件
Imports System.ComponentModel
Public Class MyRadio
Inherits RadioButton
Private _permitted As Boolean = True
<DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _
<Browsable(True)> _
Public Property Permitted() As Boolean
Get
Return _permitted
End Get
Set(ByVal value As Boolean)
_permitted = value
End Set
End Property
Protected Overrides Sub OnClick(ByVal e As System.EventArgs)
If _permitted Then MyBase.OnClick(e)
End Sub
End Class
您可以添加第三个单选按钮,并将其文本设置为“无”或其他。它清楚地传达了不选择任何东西是一种选择的思想。如果用户尝试选中第二个复选框,请以编程方式取消选中第一个复选框。但是可以有多个复选框,单选按钮不允许这样做。您必须添加一些条件代码,以禁止同时选中两个复选框。为什么需要按钮?为什么不只是勾选复选框,如果另一个复选框被勾选,取消勾选?!是的,你也可以这样做直到。。。调用Sub以设置。。。循环既不精确,也不实用。这是浪费CPU时间,如果有的话。错误的语言!问题被标记为VB!干得好我觉得不错。
Imports System.ComponentModel
Public Class MyRadio
Inherits RadioButton
Private _permitted As Boolean = True
<DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _
<Browsable(True)> _
Public Property Permitted() As Boolean
Get
Return _permitted
End Get
Set(ByVal value As Boolean)
_permitted = value
End Set
End Property
Protected Overrides Sub OnClick(ByVal e As System.EventArgs)
If _permitted Then MyBase.OnClick(e)
End Sub
End Class
myRadio1.Permitted = False 'Assigning it to false will not allow you to select it.