我正在开发一个有很多复选框的应用程序,这些复选框从未选中开始,每个复选框都有一个关联的文本框,在复选框被选中之前一直被禁用。
我正在经历并且目前一个接一个地做“如果选中,启用,如果未选中,禁用” - 但它会永远消失!
我应该使用哪种更快的方法/方法来加快这个过程吗?
我没有说出语言,因为我不确定它是否重要 - 我正在使用VB进行编程,但是我只想在正确的(语言无关的)方向上推进,我可以从那里进一步研究。
答案 0 :(得分:6)
您可以创建一个带有复选框和文本框的函数,并处理复选框的事件以禁用文本框。
然后,您可以简单地为每对调用一次函数。
例如:(在C#中)
void BindCheckbox(CheckBox checkbox, Control targetControl) {
targetControl.Enabled = checbkox.checked;
checkbox.CheckedChanged += delegate { targetControl.Enabled = checbkox.checked; };
}
BindCheckbox(someCheckbox, someTextbox);
答案 1 :(得分:5)
为什么不创建一个具有复选框和文本框的控件,并处理该控件中文本框的启用/禁用?
答案 2 :(得分:0)
如果您可以将它们包含在同一个包含元素中,例如<td>
,则会为复选框执行通用onchange
。如果没有,只需调整以下代码的DOM横向以找到正确的文本框。
$('input:checkbox').change(function() {
//$(this).siblings('yourTextbox').attr('disabled',!this.checked);
});
这是一个小提琴,用于演示目的:http://jsfiddle.net/robert/WTAw8/
修改强> 我想我完全误解了你正在寻找的语言......这是基于jQuery / Javascript的...所以如果你没有基于网络,请忽略它。
答案 3 :(得分:0)
您可以让所有复选框调用一个事件处理程序,并传递一些标识符。在事件处理程序中,根据该标识符禁用/启用关联的文本框。 (我假设每个复选框/文本框对都以某种方式命名相似)
答案 4 :(得分:0)
我用于类似问题的一种方法是使用复选框的Name
属性,将文本字段命名为类似的,并且它们可以互相引用。
C#示例
//assume the checkboxs are named cbxfield1, cbxfield2, ect. and the text box is named txtfield1, txtfield2, ect.
public void CheckBoxChecked(object sender, EventArgs e)
{
var checkBox = (CheckBox)sender;
var name = checkNox.Name.Substring(3);
var textBox = (TextBox)containerWithTextFields.Controls["txt"+name];
textBox.Enabled = checkBox.Checked;
}
答案 5 :(得分:0)
我会为您页面上的每个单选按钮文本框组合添加一个面板。在面板中,确保复选框和关联的文本框包含在其中。然后在表单的.vb文件中添加以下内容。确保为每个复选框的checkchanged事件添加处理程序。
Private Sub chk_CheckedChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles _
chk1.CheckedChanged, chk2.CheckedChanged
Dim chk As CheckBox = CType(sender, CheckBox)
For Each ctrl As Control In chk.Parent.Controls
If ctrl.Name <> chk.Name AndAlso ctrl.GetType() Is GetType(TextBox) Then
CType(ctrl, TextBox).Enabled = chk.Checked
End If
Next
End Sub
答案 6 :(得分:0)
这是另一个尝试我认为更接近OP想要的答案。创建一个复选框/文本框管理器控件,将复选框映射到类似于this telerik radajaxmanager控件所执行的文本框。 然后,您向管理器注册一个复选框,然后注册您要启用/禁用的每个文本框。
对象模型会是这样的:
Public Class CTManager
CheckToTextMappingCollection Mappings
End Class
Public Class CheckToTextMappingCollection
Inherits List(Of CheckToTextMapping)
End Class
Public Class CheckToTextMapping
Public Property CheckBox As CheckBox
Public Property IEnumerable<TextBox> AffectedTextBoxes
Public Sub New(ByVal CheckBox As CheckBox)
Me.CheckBox = CheckBox
AddHandler CheckBox.CheckedChanged, AddressOf CheckBoxChanged
End Sub
Public Sub AddTextBox(ByVal TextBox As TextBox)
AffectedTextBoxes.Add(TextBox)
End Sub
Public Sub CheckBoxChanged(ByVal sender As Object, ByVal e As System.EventArgs)
For Each tb As TextBox in AffectedTextBoxes
tb.Enabled = CheckBox.Checked
Next
End Sub
End Class
**** Untested ****
这样做可以使它更具可扩展性(启用/禁用的不同规则可以放在事件处理程序等中)并将处理它的逻辑分离到它自己的对象中。