webForumDet fria alternativet

Skicka värde från userkontroll till mainform.

.NET

2 svar · 759 visningar · startad av saw

Medlem sedan mars 20011 880 inlägg
Frågan#1

Jag tänkte bygga om min Musiktransposer. I stället för en ända form så tänkte jag försöka med en form och ett antal usercontroller.
Lite problem, i usercontrollen så finns det en del comboboxar. När värdet i de ändras så vill jag skicka det till min huvudform och till toolStripStatusLabel2.Text.
OBS detta är en windowsapplikation.
[REDIGERAT]

//I UserControl
private void cmbOrginal_SelectedIndexChanged(object sender, EventArgs e)
{
toolstriptext2 = cmbOrginal.Text;
//+ lite mera
}
private string toolstriptext2;
        public string Toolstriptext2
        {
            get { return toolstriptext2 = cmbOrginal.Text; }
            set { toolstriptext2 = value; }

        }

//i Form frmTranspose
 public string Toolstriptext2
        {
            get { return chordanalys1.Toolstriptext2; }
            set { toolStripStatusLabel2.Text = value; }
        }

Jag får inga som helst värden med mig ;-(
Råd och tips skulle sitta fint. :stud

Medlem sedan maj 20012 812 inlägg
#2

Jag får inte riktigt någon ordning på din kod så jag kan inte hjälpa dig direkt med det, men så här bör du lösa det.

Dina Usercontroller skall inte veta något om din Form, så du får inte ha någon referens från din usercontroll till din form utan all kommunikation från usercontrollen till formen måste ske med events.

Din Form får givetviss känna till dina usercontrol och kan ha referencer till dessa.

- Så du skapar en usercontrol med alla kod och controller som du behöver
- Du skapar ett event i denna usercontrol som du "Raiser" när du att information från din controll skall skickas till din Form.
- Din form lyssnar på detta Event och skriver ut informationen till till Label.

Kom ihåg att inkapsla dina controller så mycket som möjligt, iprincip så har du inga publika metoder/properties på dessa överhuvudtaget, utan du har en construktor som tar den information den behöver och så event som skickar information tillbaka.

För att avkoppla dina usercontroller ännu mer så använder du IoC och DI för att koppla loss beroende från din usercontroll till andra källor (t.ex hämta data från en databas).

- M

Medlem sedan mars 20011 880 inlägg
#3

Jag har nu lyckats lösa mitt problem:

//i usercontrollen
//delegat
 public delegate void cmbOrginalSelectedItemChangedHandler(object sender, EventArgs e);
//events
 public event cmbOrginalSelectedItemChangedHandler cmbOrginalSelectedItemChanged;
//propertu
 public string ToolStatusText2
        {
            get
            {
                return toolStatusText2;
            }
            set
            {
                toolStatusText2 = value;
            }
        }
//sen i comboboxens selectindixchange
 cmbOrginalSelectedItemChanged(this, EventArgs.Empty);
                toolStatusText2 = cmbOrginal.Text;
                if (cmbOrginalSelectedItemChanged != null)
                {
                    cmbOrginalSelectedItemChanged(this, EventArgs.Empty);
                }
//sen i min form
 this.transposer1.cmbOrginalSelectedItemChanged += transposer_change;
//och hämtar värdet
 private void transposer_change(object sender, EventArgs e)
        {
            toolStripStatusLabel2.Text = this.transposer1.ToolStatusText2;

Nu fungerar detta väldigt bra. :i
Tack för din respons Gladh

261 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)