폼에 컨트롤을 채우는 데 사용되는 매개 변수를 생성자가 사용하는 폼 클래스가 있습니다. 그들은 체크 박스, 몇 개의 콤보 상자, 날짜 시간 선택기 및 몇 개의 텍스트 상자로 구성됩니다. 폼이 렌더링 될 때 텍스트 상자가 비어있게 나타납니다. 코드를 단계별로 실행하면 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;
}
}
각 그리기 방법은 양식에 컨트롤을 추가합니다.
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 속성을 설정 한 다음 그룹 상자에 추가하는 것입니다. 디버거에서 클래스를 검사하면 모든 것이 잘 나타나지만 표시가 으로 표시되면 텍스트 필드가 지워지고 조사 식 창에 빨간색으로 표시됩니다. 다른 모든 컨트롤은 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);
}
}
나는 ... 검증은 그것을 허용하지 않기 때문에 빈 결코 데이터베이스에서 검색 값,하지만 아무것도
코드를 공유 할 수 있습니까? – Ramashankar
'txtboxId.Text'를 사용하여 텍스트 상자의 텍스트를 설정 하시겠습니까? –
Form_Load에서 텍스트 상자가 지워지지 않았는지 확인하십시오 (양식을 보여주는 wen이라고 부름)? – Akrem