Da li je moguce da na osnovu stanja u bazi na MAIN formi se pojavljuje ili ne pojavljuje CheckBox, a da pritom taj CheckBox nisam ja prevukao na formu i njegovu vidljivost regulisao preko Visible, nego njegovo postojanje korisnik regulise? Prost primer: Imam upitnu formu za korisnika u kojoj on treba da upise u TextBox "0" ili "1", a zatim pritiskom dugmeta OK trebalo bi da se otvori nova forma, prazna ako je odabrana "0" i forma sa CheckBox-om i tekstom u checkBox-u koji glasi "USPEH" ako je odabrana "1". Imali neko ideju kako da kreiram ovu mogucnost za korisnika, da on ustvari odredjuje sta ce biti na formi?
Kreiranje objekta od strane korisnika
Zaključano
Zakačeno
Code:
If nesto = 1 then
Dim ch As New CheckBox
ch.Text = "USPEH"
ch.Top = 11
ch.Left = 50
' itd ....
Me.Controls.Add(ch)
end if
If nesto = 1 then
Dim ch As New CheckBox
ch.Text = "USPEH"
ch.Top = 11
ch.Left = 50
' itd ....
Me.Controls.Add(ch)
end if
Potpis
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
Da je važnije biti ljubazan nego biti u pravu
C# je jezik, ali iz ovoga sto si ovde naveo mislim da nesto kontam, ali moracu prvo da probam. Ovo mi deluje dosta jednostavno, razmisljao sam na jedan drugi nacin (mnogo komplikovaniji) a mozda se bas u ovoj jednostavnosti krije i odgovor
Nista ostaje mi da probam pa cu saznati sve.
koristan link http://www.developerfusion.com/tools/convert/csharp-to-vb/
Potpis
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
Da je važnije biti ljubazan nego biti u pravu
Evo ja da ne otvaram novu temu, nadovezacu se na ovu:
Treba mi kod (vb) za prevlacenje itema (npr. ovog gore checkboxa) po formi, tzv. drag n drop?
Treba mi kod (vb) za prevlacenje itema (npr. ovog gore checkboxa) po formi, tzv. drag n drop?
Ok, uspeo sam da napravim da korisnik moze sam da kreira CheckBox. Ali kako sad ja da omogucim da ukoliko korisnik CheckBox postavi na stanje true da mi se tada npr. pojavi label.Text "RADI!"?
Moras da dodas EventHandler metodu na dogadjaj.
U konstruktoru forme sigurno imas poziv metode InitializeComponent(). Njena definicija se nalazi u fajlu ImeForme.Designer.cs. Kad nesto dodas/promenis u design modu, upisace se u ovaj fajl. Proanaliziraj ovaj fajl, moze ti biti korisno.
Code:
CheckBox chk = new CheckBox();
//...
chk.CheckedChanged += new System.EventHandler(this.chk_CheckedChanged);
CheckBox chk = new CheckBox();
//...
chk.CheckedChanged += new System.EventHandler(this.chk_CheckedChanged);
Code:
private void chk_CheckedChanged(object sender, EventArgs e)
{
// na primer
lbl.Text = ((CheckBox)sender).Checked ? "Radi" : "Ne radi";
}
private void chk_CheckedChanged(object sender, EventArgs e)
{
// na primer
lbl.Text = ((CheckBox)sender).Checked ? "Radi" : "Ne radi";
}
U konstruktoru forme sigurno imas poziv metode InitializeComponent(). Njena definicija se nalazi u fajlu ImeForme.Designer.cs. Kad nesto dodas/promenis u design modu, upisace se u ovaj fajl. Proanaliziraj ovaj fajl, moze ti biti korisno.
Ok, to sam skontao ali meni ustvari nastaje problem kada generisem u istom momentu i label i checkBox. Tada label treba da zavisi od toga da li je checkBox na true ili na false. Izgleda da nisam predhodno pitanje dobro formulisao. :-/
Daj kod koji ti pravi problem.
private void Form1_Load(object sender, EventArgs e)
{
//TODO: This line of code loads data into the 'dsObradaUzorka.tblObradaUzorka' table. You can move, or remove it, as needed.
this.tblObradaUzorkaTableAdapter.Fill(this.dsObradaUzorka.tblObradaUzorka);
Class1 conn1 = new Class1();
conn1.setSqlConnection();
clsFunc.odredjivanje_TotalRow("tblAnalize");
for (int i = 0; i <= clsVariables.sTotalRow; i++)
{
if (i != 0)
{
if (clsVariables.sAnaliza != "")
{
clsFunc.citanje_Podataka(i, "tblAnalize");
CheckBox ckb = new CheckBox();
ckb.AutoSize = true;
ckb.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
ckb.Location = new System.Drawing.Point(clsVariables.sX, clsVariables.sY);
ckb.Name = "checkBox" + clsVariables.sID;
ckb.Text = clsVariables.sAnaliza;
ckb.UseVisualStyleBackColor = true;
ckb.CheckedChanged += new System.EventHandler(this.ckb_CheckedChanged);
this.Controls.Add(ckb);
ComboBox cmb = new ComboBox();
cmb.DataSource = this.tblObradaUzorkaBindingSource;
cmb.DisplayMember = "Uređaj za obradu";
cmb.FormattingEnabled = true;
cmb.Location = new System.Drawing.Point(143, 389);
cmb.Name = "cmbUredjaj" + clsVariables.sID;
cmb.Size = new System.Drawing.Size(121, 21);
cmb.ValueMember = "ID";
cmb.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.cmb_KeyPress);
this.Controls.Add(cmb);
}
}
}
}
Kako sada da Enabled ovako nastalog ComboBox-a zavisi od stanja pre njega nastalog CheckBox-a? E, to mi je problem jer oblast postojanja objekta cmb prestaje u okviru funkcije Form1_Load.
{
//TODO: This line of code loads data into the 'dsObradaUzorka.tblObradaUzorka' table. You can move, or remove it, as needed.
this.tblObradaUzorkaTableAdapter.Fill(this.dsObradaUzorka.tblObradaUzorka);
Class1 conn1 = new Class1();
conn1.setSqlConnection();
clsFunc.odredjivanje_TotalRow("tblAnalize");
for (int i = 0; i <= clsVariables.sTotalRow; i++)
{
if (i != 0)
{
if (clsVariables.sAnaliza != "")
{
clsFunc.citanje_Podataka(i, "tblAnalize");
CheckBox ckb = new CheckBox();
ckb.AutoSize = true;
ckb.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
ckb.Location = new System.Drawing.Point(clsVariables.sX, clsVariables.sY);
ckb.Name = "checkBox" + clsVariables.sID;
ckb.Text = clsVariables.sAnaliza;
ckb.UseVisualStyleBackColor = true;
ckb.CheckedChanged += new System.EventHandler(this.ckb_CheckedChanged);
this.Controls.Add(ckb);
ComboBox cmb = new ComboBox();
cmb.DataSource = this.tblObradaUzorkaBindingSource;
cmb.DisplayMember = "Uređaj za obradu";
cmb.FormattingEnabled = true;
cmb.Location = new System.Drawing.Point(143, 389);
cmb.Name = "cmbUredjaj" + clsVariables.sID;
cmb.Size = new System.Drawing.Size(121, 21);
cmb.ValueMember = "ID";
cmb.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.cmb_KeyPress);
this.Controls.Add(cmb);
}
}
}
}
Kako sada da Enabled ovako nastalog ComboBox-a zavisi od stanja pre njega nastalog CheckBox-a? E, to mi je problem jer oblast postojanja objekta cmb prestaje u okviru funkcije Form1_Load.
izmenjeno 1 put, poslednji put marko1981 20.02.2009. u 13:49
Izmene poruke
- marko198120.02.2009. u 13:49zapis iz teksta poruke
Citat:
...oblast postojanja objekta cmb prestaje u okviru funkcije Form1_Load...
Da, u smislu pristupanja navodjenjem imena kontrole. Kontrola postoji sa svojim imenom, ali nemas lokalnu promenljivu u klasi forme koja se zove ckb.
Imas bar 2 nacina da ovo resis.
Prvi je da napravis u Form.cs klasi lokalnu promenljivu CheckBox ckb ...
Code:
// Form1.cs:
private ComboBox cmb = null;
// Form1.cs:
private ComboBox cmb = null;
... a da je u Load metodi samo inicijalizujes. Posle bi mogao da joj pristupis kao sto verovatno sad pokusavas.
Znaci, ne bi bilo:
Code:
ComboBox cmb = new ComboBox();
// ...
ComboBox cmb = new ComboBox();
// ...
nego
Code:
this.cmb = new ComboBox();
// ...
this.cmb = new ComboBox();
// ...
Drugi je da CheckBox kontrolu ckb trazis pomocu
Code:
Controls[] controls = this.Controls.Find("ckb", true);
if (controls.Length > 0)
{
CheckBox chkBox = controls[0];
}
Controls[] controls = this.Controls.Find("ckb", true);
if (controls.Length > 0)
{
CheckBox chkBox = controls[0];
}
Ja sam za prvo resenje.
Btw. Kad ubacujes kod u odgovor, stavi ga izmedju tagova, dosta je preglednije.
Ali sada i kada sam napravio lokalnu promenjivu cmb ja ne mogu njen enabled da kontrolisem.
Koristio sam [cmb.Enabled = ((CheckBox)sender).Checked ? true : false;]
Koristio sam [cmb.Enabled = ((CheckBox)sender).Checked ? true : false;]
Moras napisati kakvu poruku dobijas.
Jel ne mozes da build-ujes kod ili ti pukne program kad naidje na ovaj red?
Jel ne mozes da build-ujes kod ili ti pukne program kad naidje na ovaj red?
Pazi on prodje kroz kod i pogledao sam u Watch prozoru on iz toga reda dobija true kao vrednost ali se nista ne desava na formi. Sve sljaka ali bez rezultata. Da zaboravih da kazem da se taj kod nalazi unutar funkcije ckb_CheckedChanged.
Tek sad sam video da ti u for petlji pravis vise kontrola, a ne samo jednu.
Ovo je za Control.ControlCollection.Find() metodu koju smo pomenuli, a za parametar postavljaj ime koje, takodje vidim, ti kreiras preko:
A ovo za lokalnu promenljivu u ovom slucaju zaboravi.
Ovo je za Control.ControlCollection.Find() metodu koju smo pomenuli, a za parametar postavljaj ime koje, takodje vidim, ti kreiras preko:
Code:
// ...
ckb.Name = "checkBox" + clsVariables.sID;
cmb.Name = "cmbUredjaj" + clsVariables.sID;
// ...
// ...
ckb.Name = "checkBox" + clsVariables.sID;
cmb.Name = "cmbUredjaj" + clsVariables.sID;
// ...
A ovo za lokalnu promenljivu u ovom slucaju zaboravi.
Kad ti dodas kroz design neku kontrolu i ona automatski dobije ime, recimo Label1, property Name takodje postaje Label1.
Ti ovde sam postavljas Name i to iskoristi da pristupis odredjenoj kontroli u nizu kontrola.
Ti ovde sam postavljas Name i to iskoristi da pristupis odredjenoj kontroli u nizu kontrola.
Mozesli ovu metodu malo da mi pojasnis? Ne razumem kako preko nje da kontrolisem stanje cmb.enabled u zavisnosti od toga da li je ckb.Checked na true/false? Takodje, ne razumem da li bi onda to znacilo da bi takav kod trebalo ubaciti u funkciju ckb_CheckedChanged?
izmenjeno 1 put, poslednji put marko1981 20.02.2009. u 13:49
Izmene poruke
- marko198120.02.2009. u 13:49zapis iz teksta poruke
Mozda ima neka greska posto kucam direktno ovde, ali shvatices verovatno ideju.
Code:
private void chk_CheckedChanged(object sender, EventArgs e)
{
CheckBox chk = (CheckBox)sender;
string name = chk.Name;
string id = name.Substring("checkBox".Length);
string comboBoxName = string.Format("cmbUredjaj{0}", id);
Controls[] cntrls = this.Controls.Find(comboBoxName, true);
if (cntrls.Length > 0)
{
((ComboBox)cntrls[0]).Enabled = chk.Checked;
}
}
private void chk_CheckedChanged(object sender, EventArgs e)
{
CheckBox chk = (CheckBox)sender;
string name = chk.Name;
string id = name.Substring("checkBox".Length);
string comboBoxName = string.Format("cmbUredjaj{0}", id);
Controls[] cntrls = this.Controls.Find(comboBoxName, true);
if (cntrls.Length > 0)
{
((ComboBox)cntrls[0]).Enabled = chk.Checked;
}
}
Ne moze da ga pokrene za uslov if prijavljuje: Operator '>' cannot be applied to operands of type 'method group' and 'int'
Izvini, kucao sam direktno ovde, a ne u VS.
Nije Count, nego Length.
Nije Count, nego Length.