나는 지금 내가 며칠 동안 조사 해본 문제가있다. 나는 내가 원하는 것을 논리적으로 생각할 수 없다.동적으로 생성 된 컨트롤의 데이터 참조 및 저장?
나는 작업 목록이있는 앱을 가지고 있습니다. 텍스트 상자, datetimepicker 및 클릭시 이미지를 변경하는 PictureBox의 3 가지 컨트롤로 시작됩니다. 다음 아래 제어의 다른 행을 추가 할 이미지를 누르면 사용자는 (이미 생성 된 컨트롤에서 동적 제어의 속성을 취득)
https://www.dropbox.com/s/o2pub6orww24w25/tasklist.png
(이것은 그것이 명확하게하기위한 스크린 샷이다) 이제는 각 행 (TextBox, Date, Status로 정의 된 행)의 값을 SQLite DB에 저장합니다.
고유 한 디자인 이름이 있고 ('정적'컨트롤이기 때문에) 첫 번째 행은 쉽습니다. '는 현재 컨텍스트에 존재하지 않는'때문에
문제 a) I 동적 제어를 참조 할 수있다 : I 동적 제어의 값을 저장하려고하면 그러나, 문제는 안타. - 컨트롤을 만드는 함수는 공용 액세스 한정자가있어서 트릭을해야한다고 생각 했나요? - 그렇지 않았어. 나는 또한 시도했다 : Panel1.pb.blah
하지만 그것은 여전히 컨트롤을 인식하지 못했습니까?
문제 b) 각 행이 새로운 데이터 집합임을 내 프로그램에 알릴 수 있습니까? 즉, 각 행에 대해 새로운 삽입 명령을 실행하려면 어떻게해야합니까? - for each-textbox 루프로 생각했는데 매번 첫 번째 동적 날짜를 가져 오는 것이 아니라고 생각하십니까?
또한 태그 속성을 사용하여 카운터 변수를 설정하여 행의 컨트롤을 그룹화했습니다. (카운터는 새로운 행이 추가 될 때마다 증가하는 정수입니다.) 그러나 그림 상자는 해당 기능의 일부로 태그 속성을 사용하여 클릭 (변경 사항 여러 번) 할 때 이미지를 변경하기 때문에 그렇게 할 수 없습니다.
코드 :
추가 컨트롤 : 컨트롤을 참조하려고
public void pictureBox1_Click(object sender, EventArgs e)
{
//TextBox Control
int tbh = tasktb.Location.Y + (counter*25);
int tbsh = tasktb.Size.Height;
int tbsw = tasktb.Size.Width;
TextBox tb = new TextBox();
tb.Location = new Point(9, tbh);
tb.Size = new System.Drawing.Size(tbsw, tbsh);
tb.Tag = counter.ToString();
//Date Time Control
int dth = duedatedb.Location.Y + (counter * 25);
int dtsh = duedatedb.Size.Height;
int dtsw = duedatedb.Size.Width;
DateTimePicker dtp = new DateTimePicker();
dtp.Location = new Point(300, dth);
dtp.Size = new Size(dtsw, dtsh);
dtp.Format = System.Windows.Forms.DateTimePickerFormat.Short;
//Picture Box Control
int stsh = status.Location.Y + (counter * 25);
int stssh = status.Size.Height;
int stssw = status.Size.Width;
PictureBox pb = new PictureBox();
pb.Location = new Point(429, stsh);
pb.Size = new Size(stssw, stssh);
pb.Image = Red;
pb.Click += new System.EventHandler(pb_Click);
panel1.Controls.Add(tb);
panel1.Controls.Add(dtp);
panel1.Controls.Add(pb);
++counter;
}
: (클릭의 이미지를 변화의 목적은)는 MSDN이 연구에서 Control.Find 기능 발견 웹 사이트]
public void pb_Click(object sender, EventArgs e)
{
PictureBox pb = (panel1.Controls.Find("pb",false));
if (pb.Image == Red) { pb.Image = Orange; status.Tag = "Orange"; }
else if (pb.Image == Orange) { pb.Image = green; status.Tag = "Green"; }
else if (pb.Image == green) { pb.Image = Red; status.Tag = "Red"; }
}
근본적인 문제는 여기에 내가 그 잘못 갈 어디 사람이 볼 수있는 경우는, 난 도망 갈 수 및 일부 C를 작성하려고 할 것 문제입니다 문제를 해결하기위한 과업 b. (최선의 방법에 대한 제안으로이 문제 B를 포함 시켰습니다.) -
도움을 주셔서 감사합니다! 정말 고맙습니다!
훌륭합니다. 완벽하게 컴파일됩니다. 고마워요 – Wills
@BlakeWills 당신은 남자 +1을주고 답을 받아 들여야합니다. 나는 정확하게 똑같은 것을 제안하려했다. –
만약 내가 할 수 있었다면 (이 계정에 충분한 담당자가 없다면!) 대답을 받아 들일 것이다. – Wills