Почему функция автоматического изменения размера неправильно устанавливает ширину? - PullRequest
0 голосов
/ 13 февраля 2019

Я программно создаю метки и текстовое поле рядом с ним.

Чтобы создать текстовое поле рядом с ним, я использую следующие вычисления для определения Location.X для текстового поля: label2.X + label2.Width +5;

Вот проблема;ярлык создается, и я включил для него авторазмер, а затем после ввода текста его размеры соответственно.Тем не менее, текстовое поле не создается, кроме него, но оно перекрывает его на некотором расстоянии.

Я отладил свой код, и метка возвращала ширину 100, а после создания дублирующей метки вручную с автоматическим изменением размера и тем жестрока текста, ширина которой стала 149. Почему эта проблема существует и есть ли решение этой проблемы, кроме как делать это вручную каждый раз, когда возникает проблема?

Мой код ниже:

//Qd
                //label
                Label label2 = new Label();
                label2.Location = new System.Drawing.Point(6, 68);
                label2.Name = "label2";
                //label2.Size = new System.Drawing.Size(24, 13);
                label2.TabIndex = 16;
                label2.Text = "Characteristic Strength Qd:";
                label2.AutoSize = true;
                label2.MouseHover += new EventHandler(BoucWen_Qd_MouseHover);
                //textbox
                TextBox textBox3 = new TextBox();
                textBox3.Location = new System.Drawing.Point(/*90*/149+5+6, 65);
                textBox3.Name = "Qd";
                textBox3.Size = new System.Drawing.Size(197, 20);
                textBox3.TabIndex = 17;
                textBox3.Tag = "Characteristic Strength\r\n Link: )_Element";
                textBox3.HelpRequested += new HelpEventHandler(Node_label1_HelpRequested);
                //create units label 
                x_unit = textBox3.Location.X + textBox3.Width + 5;
                y_unit = textBox3.Location.Y;
                labelUnit = new Label();
                labelUnit.Location = new System.Drawing.Point(x_unit, y_unit);
                labelUnit.AutoSize = true;
                labelUnit.Text = forceunit;
                Fixidity_panel.Controls.Add(labelUnit); 

//adding the above two label&textbox:
 Fixidity_panel.Controls.AddRange(new Control[] {

                     comboBox2,
                     label11,
                     textBox11,
                     label10,
                     comboBox1,
                     label9,
                     textBox9,
                     label8,
                     textBox8,
                     label7,
                     textBox7,
                     label6,
                     textBox6,
                     label5,
                     textBox5,
                     label4,
                     textBox4,
                     label3,
                    textBox3,
                     label2,
                     textBox2,
                     Stiffness_label, });

1 Ответ

0 голосов
/ 13 февраля 2019

Когда для свойства AutoSize установлено значение true, вычисление ширины будет выполняться только после того, как оно будет добавлено на панель.следовательно, вы должны сначала добавить его на панель, а затем добавить текстовое поле и установить его местоположение .Location = label2.Location.X+label2.Width +5, чтобы получить ожидаемый результат.вот мое предложение, основанное на вашем коде:

(пожалуйста, прочитайте мои комментарии, написанные прописными буквами)

//label
Label label2 = new Label();
label2.Location = new System.Drawing.Point(6, 68);
label2.Name = "label2";
//label2.Size = new System.Drawing.Size(24, 13);
label2.TabIndex = 16;
label2.Text = "Characteristic Strength Qd:";
label2.AutoSize = true;
// ADD IT TO THE PANEL IN ORDER TO GAIN A WIDTH
Fixidity_panel.Controls.Add(label2);
label2.MouseHover += new EventHandler(BoucWen_Qd_MouseHover);
//textbox
TextBox textBox3 = new TextBox();
// NOW YOU CAN DO:  .Location = label2.X+label2.Width+5
textBox3.Location = new System.Drawing.Point(label2.Location.X+label2.Width +5, 65);
textBox3.Name = "Qd";
textBox3.Size = new System.Drawing.Size(197, 20);
textBox3.TabIndex = 17;
textBox3.Tag = "Characteristic Strength\r\n Link: )_Element";
// NOW ADD THE TEXTBOX
Fixidity_panel.Controls.Add(textBox3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...