我有一个表单类,其构造函数接受一堆参数,用于填充表单上的控件。它们包含一个复选框,几个组合框,一个日期时间选择器和几个文本框。呈现表单时,文本框显示为空白。如果我单步执行代码,我会看到textbox.Text字段设置正确,但是当调用form.Show时,值将被清除。所有其他控件都保留传递给构造函数的值。
这些表单都是动态构建的。我不明白为什么会发生这种情况,构造函数和渲染之间没有其他代码运行。
public partial class Disposition : Form
{
string _ncmID;
int _baseNumber;
string _type;
string _by;
string _partNo;
DateTime _date;
int _qty;
bool _supplierCaused;
string _notes;
DateTime _dateReturned;
frmMain _parentForm;
GroupBox gbDisposition;
CheckBox cbSupplierCaused;
TextBox txtDispQuantity;
Label lblQuantity;
DateTimePicker dtDate;
Label lblDate;
ComboBox cboBy;
Label lblBy;
TextBox txtNotes;
Label lblNotes;
DateTimePicker dtDateReturned;
ComboBox cboPart;
public Disposition(frmMain parent, string type, string by, DateTime date, int qty, bool supplierCaused,
string partNo, string notes, string ncmID, int baseNumber, DateTime dateReturned)
{
InitializeComponent();
_parentForm = parent;
_type = type;
_by = by;
_qty = qty;
_date = date;
_supplierCaused = supplierCaused;
_partNo = partNo;
_notes = notes;
_ncmID = ncmID;
_baseNumber = baseNumber;
_dateReturned = dateReturned;
switch (_type)
{
case "Scrap":
DrawScrap(true);
break;
case "Rework":
DrawRework(true);
break;
case "Return to Vendor":
DrawReturn(true);
break;
case "Use as Is":
DrawUse(true);
break;
case "Void":
DrawVoid(true);
break;
default:
break;
}
}
每个Draw方法都会向表单添加控件,例如
txtDispQuantity = new TextBox();
txtDispQuantity.Location = new Point(248, 31);
txtDispQuantity.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
txtDispQuantity.Size = new Size(55, 20);
txtDispQuantity.Validating += new CancelEventHandler(txtDispQuantity_Validating);
txtDispQuantity.Text = _qty.ToString();
gbDisposition.Controls.Add(txtDispQuantity);
所以我只是设置文本框的Text属性,然后将其添加到组框中。如果我在调试器中检查类但是一旦调用了Show,一切看起来都很好 文本字段将被清除,并在监视窗口中显示为红色。所有其他控件都保留Draw方法中设置的值。
form_load中唯一发生的事情是组合框设置(在项目列表中添加字符串)。
private void txtDispQuantity_Validating(object sender, CancelEventArgs e)
{
int q;
if (!Int32.TryParse(txtDispQuantity.Text, out q))
{
MessageBox.Show("Please enter an integer value for the quantity", "NCM", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
在代码中没有任何地方我将这些控件的Text字段设置为除了从数据库中检索的值之外的任何值,因为验证不允许它从不为空...
答案 0 :(得分:0)
原来,窗体上的另一个控件(组合框)由于逻辑缺陷而抛出异常,但仍显示正确的值。谢谢你的帮助。