【发布时间】:2012-08-16 13:41:12
【问题描述】:
我正在尝试制作一个可以容纳可变数量的字符串并通过以编程方式更改此控件的高度来动态调整其高度的控件。
到目前为止,我已经尝试过 Checked Listbox 和 ListView。
列表框一直显示水平滚动条,即使它已设置为 false。 ListView 看起来更有希望,但它拒绝重新排列框中的项目:
public partial class Form1 : Form
{
string[] content =
{
"Lorem",
"ipsum",
"dolor",
"sit",
"amet",
"consectetur",
"adipiscing",
"elit" ,
"Integer" ,
"commodo" ,
};
ListView listView1 = new ListView();
public Form1()
{
InitializeComponent();
listView1.Size = new System.Drawing.Size(300, 22);
listView1.Font = new Font(FontFamily.GenericMonospace, 10);
listView1.CheckBoxes = true;
listView1.View = View.List;
listView1.Scrollable = false;
this.Controls.Add(listView1);
groupBox1.Controls.Add(listView1);
foreach (string str in content)
{
listView1.Items.Add(str.PadRight(12));
}
}
private void Form1_Load(object sender, EventArgs e)
{
listView1.Height = 100;
}
}
如果我将listView1.Height = 100; 移动到类的构造函数中,它将起作用,很明显这就是问题所在。我似乎找不到这个问题的根本原因是什么......我应该调用列表框的一些成员函数来重新放置它的项目吗?
更新 再摆弄一些之后,似乎也可以通过使用设计器将项目添加到列表中来重现该行为,设置所有锚点,捕捉到表单的边缘并在运行时调整表单的大小。然后,再次,项目将不会重新对齐。尽管如此,仍然坚持如何强制重新定位列表视图中的项目。
【问题讨论】:
-
加载事件是否触发?如果是这样,您是否尝试过 listView1.Refresh()?
-
@Belmiris 是的,但问题不在于列表视图没有调整大小;它完美地做到了这一点。然而,列表视图中的项目保持原样:单行并且在控件之外。如果你能找到时间,只需将上面的代码复制粘贴到一个空的 windows 窗体项目中,你就会明白我的意思了。
-
未找到解决方案 - 但使用不同的视图设置(如 SmallIcon)没有此问题。只是不要设置 ImageList。
-
我一直在阅读更多的 MSDN,实际上,似乎没有解决方案。编写我自己的放置例程是行不通的,因为在列表模式下无法更改位置。 SmallIcon 本来是一个选项,它不是因为 SmallIcon 中有一个错误,它将复选框放在第一列的控件之外。我最好写我自己的清单。如果我有让我满意的东西,我会发布答案。谢谢!
标签: c# winforms listview dynamic resize