Gå til innhold

C#: sette hake ved item i ToolStripDropDownItem ved kode


Anbefalte innlegg

Hei

Jeg trodde dette skulle være en enkel sak men dengang ei,denne kontrollen er ikke som andre kontroller ser det ut til. virker som den har noen mangler ;-)

 

 

det jeg prøver på er at jeg har en menybar/toolbar øverst i programmet som jeg har en dropdown button i og under denne så har jeg en del items

 

Je skulle hatt tilgang til en spesiell del av denne kontrollen nemlig muligheten til å sette en hake ved et valgt item i denne listen men denne er ikke mulig å komme til via kode kun vis en manuelt setter denne i designeren

 

Jeg vil via kode ha muligheten til å sette en hake slik

post-112143-1287501740,397_thumb.jpg

 

 

Og jeg har prøvd denne koden for å få det til og jeg får tak i det meste av kontrollen men den har ikke mulighet til å sette eller fjerne haken ser det ut til


           foreach (ToolStripDropDownItem fontItem in this.cmFontSizes.DropDownItems)
           {
               fontItem.Checked = true;
           }

Lenke til kommentar
Videoannonse
Annonse

Det var vist enkelt å få til bare jeg brukte riktig referanse

 

Riktig kode er

foreach (ToolStripMenuItem fontItem in this.cmFontSizes.DropDownItems)
           {
               if (fontItem.Text == "48")
               {
                   fontItem.Checked = true;
               }
               else
               {
                   fontItem.Checked = false;
               }

           }

Mulig det finnes en greiere måte en if men det duger

Endret av Icaro2
Lenke til kommentar

Alle ting som er repetative å gjøre burde du gjøre med kode, ikke med designeren. Hvis du har en kode som ser slik ut som den over har du gjort noe alt for vanskelig for deg selv.

 

Hei og takk for innspill

Jeg er ikke dreven i dette og vet at jeg gjør ting vankeligere en det burde være men jeg klarer ikke helt å se den åpenbare løsningen :)

 

Det at jeg bruker if til slike ting innbiller jeg meg at programmet vil bruke mere resurser da den må sjekke hver ting men hvordan ser en mer optimal løsning ut til koden ovenfor?

 

Det som jeg prøver meg på er en tekst editor med richtextbox som utgangspunkt og størrelsen på fonten skal gjenspeile seg i dropdown lista etter hvor jeg er eller har valgt i textboxen.

 

 

Jeg er åpen for å lære ;)

Lenke til kommentar

Alle ting som er repetative å gjøre burde du gjøre med kode, ikke med designeren.

 

Hei igjen

Begynte å tenke litt på denne setningen og er det slik at jeg burde legge til denne knappen med kode og generere den på nytt med riktig innhold hver gang den åpnes?

 

eller tolket jeg det helt feil nå :innocent:

Lenke til kommentar

Beklager vis jeg poster for mye men jeg prøvde meg frem på å bygge opp menyen hver gang det er behov for å vise den

 

Font størrelsen spares i en variabel(txtsize) etter hvert som jeg flytter eller markerer noe i richtekstboxen. Standard er 10

 

I koden for Dropdown knappen så har jeg dette (finnes ingenting i lista foreløpig før jeg klikker på knappen)

       private void ddbFontSize_DropDownOpening(object sender, EventArgs e)
       {
           UpdateFontSize((int)txtSize, this.ddbFontSize);
       }

 

 

Dette kjører denne koden for å bygge opp og markerer riktig i lista

       private void UpdateFontSize(int size, ToolStripDropDownButton dropButton)
       {
           dropButton.DropDownItems.Clear();
           for (int i = 0; i < 15; i++)
           {
               ToolStripMenuItem item = (ToolStripMenuItem)ddbFontSize.DropDownItems.Add(clsRtf.FontSize[i].ToString());

               if (size == clsRtf.FontSize[i])
                       item.Checked = true;

               item.CheckOnClick = true;
               item.Click += new EventHandler(HandleFontSizeClick);  
           }
       }

 

 

Koden som genererer click og setter ny font i editoren er denne

       void HandleFontSizeClick(object sender, EventArgs e)
       {
           ToolStripItem item = (ToolStripItem)sender;
           ChangeFontSize(float.Parse(item.Text));
       }

 

 

Fontstørrelser har jeg lagt i en intern classe slik

   class clsRtf
   {

        public static int[] FontSize = new int[16] { 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72 };


   }

 

 

Er det fremdeles mot sun fornuft dette eller var det noe slik som var ment

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...