询问者
VB PowerPack中的一个bug?

常规讨论
-
最近我将.NET中Label控件和VB PowerPack中的RectangleShape控件一起使用,当我把Label控件的Parent属性设置为RectangleShape的Parent时,就会有类似于Bug的现象出现,具体引发操作如下:
(我使用的是.NET Framework 4.0和VB PowerPack 10.0)
1、创建一个Windows Forms Application项目(普通窗体项目)
2、打开窗体的视图设计器,将工具栏公共控件中一个Button对象和Visual Basic PowerPacks的一个RectangleShape对象拖至窗体任意位置
3、双击窗体上的按钮,出现查看代码窗体,保证窗体中的代码如下所示:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
Label label1;
public Form1()
{
InitializeComponent();
label1 = new Label();
label1.Parent = rectangleShape1.Parent;
label1.AutoSize = true;
}bool flag = false;
private void button1_Click(object sender, EventArgs e)
{
if (!flag)
label1.Text = "1000";
else
label1.Text = "100";
flag = true;
}
}
}
4、按下F5开始运行
5、单击一次Button对象,窗体上正常出现Label字符(窗体左上角出现"1000"的字样)
6、再次单击Button对象,窗体上字符出现异常(预期应该出现100,实现在100后面还加上了一个小尾巴)
下面是一些我自己的分析:
1、当我不使用RectangleShape.Parent,而直接将Label.Parent = this的话,此现象不会出现
2、不执行上一步,当我不将Label.AutoSize设为true的话,此现象也不会出现
3、先向控件写入一个字符串后,后一个字符串必须比前一个字符串短才会出现此问题
(即要出现此现象必须使用RectangleShape.Parent并设定Label.AutoSize=true)我想到的一些解决方法:
1、每次当控件改变时随意改变一下控件的大小(~~)
2、使用string.Format,不让字符串变短,在每次更新Label时应该使用(那个数的绝对值越大越好,用于向左边加入空格,用于对齐)
Label.Text = string.Format("{0, -5}", args);
3、调用Invalidate,即在每次更新Label时都
全部回复
-
刚刚已经确认,将Form的DoubleBuffered属性设定为true后,效果没有仍然变化。
我想问题应该是像Ferdin.Lee所说的那样,是VB那个控件的ShapeContain没有及时进行重绘的问题,应该不是Label的问题虽然最简单的解决办法显而易见,RectangleShape的Parent是一个ShapeContainer,是继承于一个UserControl,而RectangleShape.Parent.Parent就是Control,问题出现在ShapeContainer上,所以最简单的解决办法应该是将
Label.Parent = RectangleShape.Parent
改为:
Label.Parent = RectangleShape.Parent.Parent但是不管怎么说这应该还是一个不正常的行为,因此期待以后的能将这一行为修正!
-
好的,我已向Microsoft Connect 的 Visual Studio and .NET Framework项目提交bug反馈,但是我使用的是中文,不知能否接受,……
链接如下:
https://connect.microsoft.com/VisualStudio/feedback/details/654638/vb-powerpack-label-bug