【发布时间】:2011-02-21 21:21:52
【问题描述】:
我有一个继承的 Listview,其标准必须处于平铺模式。使用此控件时,DrawItem 会给出 e.bounds,它们显然是 largeIcon 视图的边界?在调试以检查它实际设置的视图时,它说它在平铺视图中?然而 e.DrawText 绘制 LargeIcon 视图??
…………编辑:…………
这似乎只发生在控件放在另一个用户控件上时?
....... 编辑 2:........
它变得陌生...当我在列表旁边添加按钮以在运行时更改视图时,“Tile”与“LargeIcon”相同,“List”视图与“SmallIcons”相同??? 我也彻底删除了ownerdraw ...
........ 编辑 3:..................
MSDN 文档: 平铺视图
每个项目都显示为一个全尺寸图标 带有项目标签和子项目 右侧的信息。这 出现的子项信息是 由应用程序指定。这 视图仅在 Windows XP 上可用 和 Windows Server 2003 家族。 在早期的操作系统中,该值会被忽略,并且 ListView 控制大图标中的显示 查看。
好吧,我在 XP 上?!?
...... 编辑 4 ......................
陌生的圣母... 我们现在已经完全剥离了一切......我们在表单上有一个标准的列表视图,手动填充了 3 个值。没有所有者抽奖。它设置为平铺。 当我们启动这个表单时,列表被绘制为 LARGEICON。
现在,我们开始另一个空白解决方案,将这个完全相同的表单复制到新项目中,开始调试,然后看,它是在 TILE 视图中绘制的????
...帮助...
public class InheritedListView : ListView
{
//Hiding members ... mwuahahahahaha //yeah i was still laughing then
[BrowsableAttribute(false)]
public new View View
{
get { return base.View; }
}
public InheritedListView()
{
base.View = View.Tile;
this.OwnerDraw = true;
base.DrawItem += new DrawListViewItemEventHandler(DualLineGrid_DrawItem);
}
void DualLineGrid_DrawItem(object sender, DrawListViewItemEventArgs e)
{
View v = this.View;
//**when debugging, v is Tile, however e.DrawText() draws in LargeIcon mode,
// e.Bounds also reflects LargeIcon mode ???? **
}
..................
此代码在不同的解决方案中表现不同:
private void InitializeComponent()
{
System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem("fhsdhdsfhsdfhs");
System.Windows.Forms.ListViewItem listViewItem2 = new System.Windows.Forms.ListViewItem("fdshdsfhdsfhsd");
System.Windows.Forms.ListViewItem listViewItem3 = new System.Windows.Forms.ListViewItem("hdshsdfhsdfhsdfsdfsdf");
this.listView1 = new System.Windows.Forms.ListView();
this.SuspendLayout();
//
// listView1
//
this.listView1.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
listViewItem1,
listViewItem2,
listViewItem3});
this.listView1.Location = new System.Drawing.Point(36, 12);
this.listView1.Name = "listView1";
this.listView1.Size = new System.Drawing.Size(487, 242);
this.listView1.TabIndex = 2;
this.listView1.TileSize = new System.Drawing.Size(480, 50);
this.listView1.UseCompatibleStateImageBehavior = false;
this.listView1.View = System.Windows.Forms.View.Tile;
//
// TestControl
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(595, 712);
this.Controls.Add(this.listView1);
this.Name = "TestControl";
this.Text = "TestControl";
this.ResumeLayout(false);
}
#endregion
【问题讨论】: