2010-07-29 5 views
4

Comment puis-je étendre un bouton?Windows Forms: comment étendre un bouton?

Je veux un bouton qui a une propriété supplémentaire IsSwitchOffable.

Dois-je écrire un contrôle personnalisé supplémentaire?

EDIT: Je souhaite que le bouton soit utilisable en tant que WindowsFormsButton standard.

Cela inclut que je peux ajouter le bouton au moment du design!

+0

Qu'est-ce IsSwitchOffable faire? –

+0

I itérer jette tous les boutons d'un conteneur et désactiver ou activer tous ceux qui sont commutables – Rookian

+0

Il est déjà là, il est appelé "Activé". –

Répondre

7

L'extension d'un contrôle de bouton n'est pas différente de l'extension d'une classe en C#. Il suffit de faire ce qui suit:

class ToggleButton : Button { 
// Add your extra code 
} 
3

Vous devez créer une classe qui hérite de la classe System.Windows.Forms.Button et ajoute votre propriété et le comportement associé. Après la compilation de votre projet, votre nouvelle classe apparaîtra dans la boîte à outils.

+0

cool, comment puis-je montrer la nouvelle propriété dans la fenêtre de propriété? – Rookian

+1

@Rookian: Vous pouvez simplement créer une propriété publique normale dans votre classe, et elle apparaîtra dans la fenêtre Propriétés. Vous pouvez ajouter les attributs 'Description',' Category', ou 'DefaultValue'. – SLaks

+2

... vraiment très simple, je ne m'attendais pas à ce que ce soit si facile. – Rookian

0

je sais que c'est vieux et a répondu - cependant Pourquoi rendre la vie difficile?

Chaque contrôle possède une propriété Tag que vous pouvez facilement mettre à IsSwitchedOffable - ou mieux l'anglais CanBeDisabled

Beaucoup plus facile.

0

Dans ma demande de puzzle emplacement de bouton 2D doit être changé ... donc j'ai besoin d'équipements supplémentaires ...

Mon bouton ButObj étend Bouton classe

Public Class ButObj : Button 
     { 
      Point initloc; 
      Public ButObj(Point loc) 

{ this.Location=initloc=loc ; } 
      Public bool isNearto(ButObj X) 
       { 
       if (this.Location.X==X.Location.X || this.Location.Y==X.Location.Y) 
        return true; 
     else return false; 
       } 
      Public bool isSettled() 
      { 
       if(this.Location==initloc) 
        return true ; 
       else return false; 
      } 
     Public void Replace (ButObj X) 
    { 
      Point temp ; 
      temp=this.Location; 
     this.Location=X.Location; 
    X.Location=temp; 
    } 
     } 

code suivant est écrit sous forme 1_load()

ButObj[ ][ ] B=new ButObj[4][4]; 
    char c='A'; 
    for (int i=0;i<4;i++) 
     for (int j=0;j<4;j++) 
     { B[i][j]=new ButObj(new Point (i*100+10,j*100+10)); 
B[j][i].Text = ""+c++; 
B[i][j].Font =new Font ("Arial", 24); 
this.Controls.Add (B[i][j]); 

B [i] [j] + = new .MouseClick MouseEventHandler (MouseClick); }

codage en cas de clic de souris

private void MouseClick(Object sender, EventArgs e) 
    { 
     ButObj b=(ButObj)sender; 
     if (b.isNearto(B[3][3])) 
     b.Replace(B[3][3]); 
\\ checking after replace 
    if(AllSolved());\\game over 
    } 

bool AllSolved() 
     { 
     for (int i=0;i<4;i++) 
      for (int j=0;j<4;j++) 
      if (!B[i][j].isSettled) 
       return false ; 
     return true; 
     }