checklistbox(c#wpf 中有没有checklistbox)
本文目录
- c#wpf 中有没有checklistbox
- delphi 中,checklistbox的问题
- c# checklistbox 设置为Unchecked,而且不可用改变为Checked,灰色的那种,如何实现
- c# checklistbox 勾选 双击
- C#中checklistbox的用法
c#wpf 中有没有checklistbox
实际项目中常常要实现有CheckBox列表框。但是WPF没有自带这样的一个控件,下面就用Style来实现这样的功能。而对于CheckBox列表框,又常常会有一个Select All的CheckBox来表示当前列表框的选择状态。这个功能也会被包含在下面的示例之中。效果如下图所示。
对于单纯的,没有后台数据绑定的情况下,这个功能可以用ItemContainerStyle来实现。代码如下:
复制代码
CheckListBoxItemContainerStyle
《Style x:Key=“CheckListBoxItemContainerStyle“
TargetType=“{x:Type ListBoxItem}“》
《!--Set it un-focusable, becaues the CheckBox in it should be focusable and only it.--》
《Setter Property=“Focusable“ Value=“False“/》
《Setter Property=“Template“》
《Setter.Value》
《ControlTemplate TargetType=“{x:Type ListBoxItem}“》
《CheckBox Content=“{TemplateBinding Content}“
ContentTemplate=“{TemplateBinding ContentTemplate}“
ContentTemplateSelector=“{TemplateBinding ContentTemplateSelector}“
IsChecked=“{Binding IsSelected, RelativeSource={RelativeSource TemplatedParent}}“/》
《/ControlTemplate》
《/Setter.Value》
《/Setter》
《/Style》
复制代码
其中要对Content和ContentTemplate等属性进行绑定,以方便对其进行扩展,保证其通用性。这个Style一般会放在Application级别的Resource中。
对于有后台数据绑定的情况,一般会有双个属性要绑定,一个是CheckBox里的Content,一个是CheckBox的IsChecked。绑定的路径,只有在用一个Style的ListBox那里才知道,所以并不能写在这个Style里,否则会破坏这个Style的通用性。比较合理的方式是基于这个现有的Style进行修改。
对于下面的数据类。
DataItem Class
我们需要下面这个有针对性的Style来应用数据绑定。
复制代码
DataItemCheckListBoxStyle
《Style x:Key=“DataItemCheckListBoxStyle“
TargetType=“{x:Type ListBox}“
BasedOn=“{StaticResource {x:Type ListBox}}“》
《Setter Property=“ItemTemplate“》
《Setter.Value》
《DataTemplate》
《TextBlock Text=“{Binding Name}“/》
《/DataTemplate》
《/Setter.Value》
《/Setter》
《Setter Property=“ItemContainerStyle“》
《Setter.Value》
《Style TargetType=“{x:Type ListBoxItem}“
BasedOn=“{StaticResource CheckListBoxItemContainerStyle}“》
《Setter Property=“IsSelected“
Value=“{Binding IsEnabled}“/》
《Setter Property=“Margin“ Value=“2,2,0,0“/》
《/Style》
《/Setter.Value》
《/Setter》
《Setter Property=“SelectionMode“ Value=“Multiple“/》
《/Style》
复制代码
在上面的Style中,使用了ItemTemplate来指定CheckBox里的Content绑定到的属性,并把ListBoxItem的IsSelected绑定数据的相应属性上。由于这个Style是针对特定数据写的,所以应当放置在使用这个Style的ListBox所在的Window的Resource中。
当然,也可以为ListBox添加两个绑定类型的Attached Property来实现一个通用的Style。不过这个Property一样要在使用的地方设置,其实没有太大区别。有兴趣的读者可以自己试一下。
对于Select All这个CheckBox而言,用Attached Property倒是很方便。给CheckBox添加一个SyncTarget属性指向要同步的ListBox,就可以在Window.xaml.cs之外的地方同步CheckBox和ListBox了。代码如下:
ToggleButtonProperty
使用方式也很简单。如下代码所示。
复制代码
用法
《DockPanel Margin=“12“》
《CheckBox Content=“Select All“
Margin=“0,0,0,5“
DockPanel.Dock=“Top“
ext:ToggleButtonProperty.SyncTarget=“{Binding ElementName=checkListBox}“/》
《ListBox x:Name=“checkListBox“
Style=“{StaticResource DataItemCheckListBoxStyle}“
ItemsSource=“{Binding Path=Items, ElementName=mainWindow}“/》
《/DockPanel》
delphi 中,checklistbox的问题
统计已经Check的选中数量进行分析判断
procedure TForm1.CheckListBox1Click(Sender: TObject);
var
i:integer;
cnt:Integer;
begin
cnt := 0;
for i:= 0 to CheckListBox1.Items.Count - 1 do
begin
if CheckListBox1.Checkedthen
Inc(cnt);
end;
if cnt = 3 then
CheckListBox1.Checked := false;
end;
c# checklistbox 设置为Unchecked,而且不可用改变为Checked,灰色的那种,如何实现
Checked = flase; 这样就是灰色的了
checklistbox.enabled=false
checklistbox的Enabled 属性设置成False
checkllistbox.enable=false;
重写在OPaint事件里面,重新绘制
c# checklistbox 勾选 双击
把CheckedListBox的CheckOnClick属性置为true即可
checklistbox 可以用JS控制 在item里面增加onclientclick事件这样就不用获取焦点
//js全选反选
《script》
//全选
function CheckBoxListAll()
{
if(document.getElementById(“Checkbox1“).checked)
{
for(var i=0;i《100;i++)
{
document.getElementById(“cbl_“+i).checked=true;
}
}
else
{
for(var i=0;i《100;i++)
{
document.getElementById(“cbl_“+i).checked=false;
}
}
}
《/script》
//邦定
《div》
《asp:CheckBoxList ID=“cbl“ runat=“server“ RepeatColumns=“3“ DataTextField=“Source“ DataValueField=“Source“》
《/asp:CheckBoxList》
《input id=“Checkbox1“ type=“checkbox“ onclick=“CheckBoxListAll();“ /》
《/div》
似乎不需要点击两次就可以选中,是否你代码有bug
C#中checklistbox的用法
前台:
《div》
《asp:CheckBoxList ID=“CheckBoxList1“ runat=“server“》
《/asp:CheckBoxList》
《asp:TextBox ID=“TextBox1“ runat=“server“》《/asp:TextBox》
《asp:Button ID=“Button1“ runat=“server“ Text=“Button“ onclick=“Button1_Click“ /》
《/div》
后台:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindCKBoxList();
}
}
static SqlConnection conn = new SqlConnection(@“server=;database=;uid=;pwd=;“);
private void BindCKBoxList()
{
SqlDataAdapter dapt = new SqlDataAdapter(@“select * from item“,conn);
DataTable dt = new DataTable();
dapt.Fill(dt);
CheckBoxList1.DataTextField = “name“;//项目名称
CheckBoxList1.DataValueField = “id“;//项目编号
CheckBoxList1.DataSource = dt;
CheckBoxList1.DataBind();
}
protected void Button1_Click(object sender, EventArgs e)
{
SqlCommand comm=new SqlCommand();
comm.Connection = conn;
SqlParameter sp={new SqlParameter(“@itemid“,SqlDbType.Int),
new SqlParameter(“@staffid“,SqlDbType.VarChar)};
conn.Open();
for (int i=0;i《CheckBoxList1.Items.Count;i++)//遍历CheckBoxList
{
if (CheckBoxList1.Items.Selected)
{
comm.Parameters.Clear();
comm.CommandText=@“insert into staff values(@itemid,@staffid)“;
sp.Value.ToString();
sp.Value=TextBox1.Text.Trim();
comm.Parameters.AddRange(sp);
comm.ExecuteNonQuery();
}
}
conn.Close();
}
更多文章:
魔灵召唤攻略(《魔灵召唤》实用攻略 新手初始发育建议 详解怎么玩)
2024年7月16日 20:02
有哪些相见恨晚的电脑小工具?车内必备的小工具,您已经准备了吗
2024年6月23日 11:09
我永远坚信只有品德好的人死后灵魂才能在天堂永恒吗!就像神一样在极乐世界永恒!?这个原本是什么游戏呢
2024年6月22日 22:03
为什么我在手机巴士里下载的JAR文件到下载完后成了ZIP文件了?手机巴士电子书打不开
2024年7月13日 07:37
迅雷网游加速器会员(迅雷会员和迅雷网游加速器的会员通用吗!!!)
2024年7月17日 22:42