我有一个带有两个自定义面板的表单,我正在向它们添加一些标签,最后我希望它们从右向左滚动,但它们只是停留在相同的位置。 有我所拥有的截图 有两个面板和 4 个标签,它们就卡在那里…… 这是我表单中的代码:
private MyPanel topPanel; // the red bar
private MyPanel botPanel; // the white bar
public SmsBar()
{
InitializeComponent();
this.Width = 500000;
this.Location = new Point(x, y);
topPanel = new MyPanel(System.Drawing.Color.White, System.Drawing.Color.Red, (new Font("Tahoma", 10, FontStyle.Bold)));
botPanel = new MyPanel(System.Drawing.Color.Black, System.Drawing.Color.White, (new Font("Tohama", 10, FontStyle.Regular)));
msgPanel.Controls.Add(topPanel);
adPanel.Controls.Add(botPanel);
botPanel.addMsg(new MsgForDisplay(0, AppData.getInstance().getAdMsg()));
botPanel.addMsg(new MsgForDisplay(0, AppData.getInstance().getAdMsg2()));
topPanel.addMsg(new MsgForDisplay(0, "test top"));
topPanel.addMsg(new MsgForDisplay(0, "test top 2"));
adPanel.Refresh();
msgPanel.Refresh();
}
还有我的自定义面板的一些代码(构造函数):
public MyPanel(Color corLabel, Color back, Font text){
this.color = corLabel;
this.backg = back;
this.textFont = text;
this.Width = 500000;
txt= new LinkedList<string>();
msgs = new LinkedList<MsgForDisplay>();
labels = new LinkedList<Label>();
var it = labels.GetEnumerator();
var it2 = msgToRemove.GetEnumerator();
this.FlowDirection = FlowDirection.LeftToRight;
this.BackColor = backg;
this.Size = new Size(500000, 35);
this.Refresh();
}
运行:
public void run() {
while (true) {
var it = labels.GetEnumerator();
while(it.MoveNext()){
Label lb = it.Current;
if (lb.Location.X + lb.Width < 0) {
if (msgsRemover.Contains(lb.Text.ToString())) {
labels.Remove(lb);
this.Invoke(new MethodInvoker(() => { this.Controls.Remove(lb); }));
msgsRemover.Remove(lb.Text.ToString());
} else {
// if there is no message to be removed, they will just continue
// going to the end of the queue
this.Invoke(new MethodInvoker(() => { this.Controls.Remove(lb); }));
this.Invoke(new MethodInvoker(() => { this.Controls.Add(lb); }));
}
this.Invoke(new MethodInvoker(() => { this.Refresh(); }));
}
this.Invoke(new MethodInvoker(() => { lb.Location = new Point(lb.Location.X - 3, lb.Location.Y); }));
}
System.Threading.Thread.Sleep(30);
}
}
addMsg 函数:
public void addMsg(MsgForDisplay msg) {
Label lbl = new Label();
lbl.Text = ("- " + msg.getText() + " -");
lbl.ForeColor = color;
lbl.Font = textFont;
lbl.BackColor = backg;
lbl.Visible = true;
lbl.AutoSize = true;
labels.AddLast(lbl);
this.Controls.Add(lbl);
}
我想问题一定出在布局上,但我真的不知道应该使用什么... 预先感谢您的帮助!
最佳答案
如果我正确理解您的问题是……标签从右向左移动,然后卡在左侧。
您正在删除和添加控件。但它不会重置控件位置。在再次添加之前,您需要将 Control.Location.X 设置为 800 或某个值。
关于c# 流布局标签卡住了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20084358/