在我的 WinForms 项目的主面板中添加新的小部件时,我遇到了一个意想不到的问题。我编写了自己的类,该类描述了一个自定义面板,该面板最终集成在第一个面板中,并放置在等于另一个面板的 (Bottom + 2) 的 Y 坐标上。这个地方在我的静态变量中。一切都很好,正如我所期望的那样。当我单击“底部+”时,我的面板出现在第一个面板上(图1)。 但是,如果我单击“按钮+”以便出现滚动线,我会将其向下移动并再次单击“按钮+”。下一个面板不仅按照计划放置 (Bottom + 2),而且根据 ScrollButton 与其中性点的距离添加了一些像素。图片(2)
我的班级代码
internal class AddPanel
{
const int coordX = 3;
static int coordY = 4;
static int num;
TextBox TBnum, TBquest, TBansw; // for each textbox from our panel
Panel newPanel; // the panel proper
public AddPanel(Panel MainPanel, params Button[] buttons)
{
newPanel = new Panel();
TBnum = new TextBox();
TBquest = new TextBox();
TBansw = new TextBox();
newPanel.Location = new Point(coordX, coordY); //TODO: Change coords
newPanel.Size = new Size(350, 88);
newPanel.Name = "MyPanel" + Convert.ToString(num);
TBnum.Location = new Point(3, 3);
TBnum.Name = "MyTBNum" + Convert.ToString(num);
TBnum.Size = new Size(27, 23);
TBquest.Location = new Point(50, 3);
TBquest.Name = "MyTBquest" + Convert.ToString(num);
TBquest.Size = new Size(287, 23);
TBansw.Location = new Point(50, 32);
TBansw.Name = "MyTBansw" + Convert.ToString(num);
TBansw.Multiline = true;
TBansw.Size = new Size(287, 47);
if (num == 0)
{
TBnum.PlaceholderText = "1";
TBquest.PlaceholderText = "Вопрос. Напр: Адрес приемной комиссии?";
TBansw.PlaceholderText = "Ответ на вопрос";
}
else TBnum.Text = Convert.ToString(num + 1);
//foreach (Button btn in buttons)
//btn.Location = new Point(btn.Location.X, btn.Location.Y + 100);
newPanel.Controls.Add(TBnum);
newPanel.Controls.Add(TBquest);
newPanel.Controls.Add(TBansw);
newPanel.BorderStyle = BorderStyle.FixedSingle;
MainPanel.Controls.Add(newPanel);
coordY = newPanel.Bottom + 2 ;
num++;
}
static AddPanel()
{
num = 0;
}
}
按钮代码:
new AddPanel(MainScrollPanel, UpButton, DownButton);
我该如何解决这个问题。我尝试用谷歌搜索,但什么也没找到。
MainScrollPanel.AutoScrollPosition = new Point(0, 0);
在创建新面板之前,我们可以将 ScrollLine 移动到中间位置。