让我们从预期的工作流程开始:
1.文本框列表在Class 1中创建并添加到Panel中。
1.在Class 2中调用List以使用double。在Windows窗体中使用用户输入进行分析。
1.类3中的按钮使用解析后的值激活一些几何计算。
问题是,当我显示一条消息来验证对象是否具有正确的值时,我总是得到一个值“0”或“NaN”。
我试着让List静态化,我用Dictionary替换了List,但没有结果;我试图解析List中的文本框,为Class 2中的一些公共变量赋值,生成了一个overflowexception。这是目前最后一次尝试:
CustomTextBox类:
{
public List<System.Windows.Forms.TextBox> GetTextBoxCon()
{
return TextBoxCon();
}
public List<System.Windows.Forms.TextBox> TextBoxCon()
{
List<System.Windows.Forms.TextBox> txtBoxCon = new List<System.Windows.Forms.TextBox>();
System.Windows.Forms.TextBox txtConD = DefaultTextBox();
txtConD.Location = p1;
txtConD.Tag = 0;
System.Windows.Forms.TextBox txtCon_d = DefaultTextBox();
txtCon_d.Location = p2;
txtCon_d.Tag = 1;
txtBoxCon.Add(txtConD);
txtBoxCon.Add(txtCon_d);
// n more textboxes...
foreach (var textBox in txtBoxCon)
{
textBox.TextChanged += new EventHandler(ConTextBox_TextChanged);
}
return txtBoxCon;
}
}
Class2:
{
public void ConeCalculation()
{
CustomTextBox ctb = CustomTextBox.Vent();
List<System.Windows.Forms.TextBox> txtBoxCon = ctb.GetTextBoxCon();
//Previous attempt
/*System.Windows.Forms.TextBox txtConD = txtBoxCon[0];
System.Windows.Forms.TextBox txtCon_d = txtBoxCon[1];*/
//Last attempt
double pre_dimLarge = double.Parse(txtBoxCon[0].Text);
double dimSmall = double.Parse(txtBoxCon[1].Text);
string message = "";
message += "pre_dimLarge: " + pre_dimLarge.ToString() + '\n' + '\n';
message += "dimSmall: " + dimSmall.ToString() + "\n" + '\n';
MessageBox.Show(message, "Verified values");
}
}
**注意:**如果您想查看其他方法的定义。好了
public static CustomTextBox inst = null;
public static CustomTextBox Vent()
{
if (inst == null)
{
inst = new CustomTextBox();
return inst;
}
return inst;
}
private void ConTextBox_TextChanged(object sender, EventArgs e)
{
if (sender is System.Windows.Forms.TextBox textBox)
{
if (!string.IsNullOrEmpty(textBox.Text) && !double.TryParse(textBox.Text, out double _))
{
textBox.ForeColor = Color.Red;
MessageBox.Show("Write just numbers.");
}
else
{
textBox.ForeColor = Color.Black;
}
}
}
public ConPanel()
{
Size = new System.Drawing.Size(258, 300);
Location = new System.Drawing.Point(12, 61);
CustomTextBox ctb = CustomTextBox.Vent();
AddTextBox(ctb);
}
public void AddTextBox(CustomTextBox ctb)
{
List<System.Windows.Forms.TextBox> conTextB = ctb.TextBoxCon();
foreach (System.Windows.Forms.TextBox textBox in conTextB)
{
Controls.Add(textBox);
}
}
1条答案
按热度按时间9w11ddsr1#
GetTextBoxCon()方法总是创建一组新的文本框。新文本框不包含文本。
在ConeCalculation()方法中,调用GetTextBoxCon()方法,将结果赋给局部临时变量txtBoxCon,然后使用这些新的空文本框。而不是你在面板中看到的原始文本框!这就是为什么在ConeCalculation()方法中得到0或NaN的原因。
要使用添加到表单中的真实的文本框,只需调用一次GetTextBoxCon()方法(可能在表单的构造函数中),将结果赋给表单/面板的成员变量(可能也称为txtBoxCon)。然后,您只需从ConeCalculation()中删除GetTextBoxCon()方法的调用即可。