ListBox删除选中项时如何同步删除关联空白行?
解决方案
最优方案:通过样式设置实现项间距(推荐)
别手动添加空白行,直接利用ListBox的样式属性或自定义绘制来控制项间距,从根源避免管理空白行的麻烦:
- WinForms场景:设置
ListBox.ItemHeight为默认高度加所需间距值,比如默认项高度20,要留5px间距就设ListBox1.ItemHeight = 25;,每个项会自带底部间距,无需额外添加空白行。也可以重写DrawItem事件,自定义绘制时在项之间预留空白区域。 - WPF场景:给
ListBox.ItemContainerStyle中的Margin或Padding设置间距值,示例代码:<ListBox> <ListBox.ItemContainerStyle> <Style TargetType="ListBoxItem"> <Setter Property="Margin" Value="0 0 0 5"/> </Style> </ListBox.ItemContainerStyle> </ListBox>
保留空白行方案:精准删除关联项
如果必须保留手动添加空白行的逻辑,删除时要根据添加规则找到关联的空白行一起删除:
假设你的添加逻辑是每添加一个内容项,就紧接着添加一个空白行(最后一个内容项后不加),那么选中内容项时,它的下一个项就是空白行,删除时需同时移除这两个项:
if (ListBox1.SelectedIndex != -1) { int selectedIndex = ListBox1.SelectedIndex; // 删除选中的内容项 ListBox1.Items.RemoveAt(selectedIndex); // 检查下一个项是否为空白行,是则一并删除 if (selectedIndex < ListBox1.Items.Count && string.IsNullOrEmpty(ListBox1.Items[selectedIndex].ToString())) { ListBox1.Items.RemoveAt(selectedIndex); } }
如果空白行是插在内容项前面,则改为检查并删除选中项的前一个索引位置的项。
内容的提问来源于stack exchange,提问作者mac
相关产品推荐
相关产品推荐

