2

J'ai un espace de nom Company.UI.Forms où nous avons une classe de base de formulaire BaseForm qui hérite de System.Windows.Forms.Form.Limiter la taille d'un contrôle utilisateur au moment du design

Je dois limiter la taille de cette forme, de sorte que si une forme concrète, disons ExampleForm, dérive de BaseForm, elle devrait avoir une taille fixe dans la vue de concepteur VS. La taille fixe doit être définie ou définie d'une certaine façon (dans le BaseForm ctor?) De sorte que le ExampleForm et le concepteur le récupère.

Est-ce possible? [Edit] Le but est d'utiliser la classe de base comme modèle pour un formulaire en plein écran pour un périphérique Windows CE de taille d'écran connue, pour lequel je veux pouvoir mettre en page des contrôles enfants dans le concepteur.

+1

Est-ce qu'il peut être redimensionnable au moment de l'exécution, ou à une taille fixe? – Pondidum

+0

Fixé. Le but est d'utiliser la classe de base en tant que modèle pour un formulaire en plein écran pour un périphérique Windows CE de taille d'écran connue, pour lequel je veux pouvoir mettre en page des contrôles enfants dans le concepteur. –

+0

Ma seconde réponse n'a-t-elle pas fonctionné pour vous? – jmservera

Répondre

1

Je ne crois pas qu'il existe un soutien direct pour ce type de scénario. Toutes les valeurs qui contrôlent la taille maximale d'un formulaire peuvent être remplacées par un formulaire enfant. Par conséquent, il n'y a aucun moyen de le contraindre d'une perspective de propriété.

La seule façon que je peux penser est de remplacer la méthode de taille modifiée et de réinitialiser la taille à la taille maximale si elle dépasse jamais. Cela peut avoir des effets négatifs et vous devriez l'utiliser avant de vous y mettre comme solution.

2

Dans WinForms standard, vous pouvez remplacer la méthode SetBoundsCore. Ce code empêchera les classes de base pour le changer au moment du design ... mais rappelez-vous, il peut être remplacé par une toute façon classe héritée: le cas parce que

protected override void SetBoundsCore(int x, int y, 
    int width, int height, BoundsSpecified specified) 
{ 
    if (this.DesignMode) 
    base.SetBoundsCore(x, y, 500, 490, specified); 
    else 
    base.SetBoundsCore(x, y, width, height, specified); 
} 

J'ai mis que vous avez indiqué être au moment de la conception, Si vous ne voulez pas de redimensionnement à l'exécution, supprimez-le.

+0

'SetBoundsCore' n'est pas disponible en .Net CF ... :-( –

+0

oups, désolé, je n'ai pas remarqué qu'il s'agissait de CF – jmservera

+0

Voir mon autre solution comme réponse alternative ... – jmservera

2

Ok, maintenant CF, solution rapide, vous pouvez faire un code plus propre en stockant dans un champ Taille ...

public BaseForm() 
{ 
InitializeComponent(); 
this.Size=new Size(20,20); 
} 


bool resizing; 

protected override void OnResize(EventArgs e) 
{ 
if(!resizing) 
{ 
    resizing = true; 
    try 
    { 
    this.Size = new Size(20, 20); 
    } 
    finally 
    { 
    resizing = false; 
    } 
} 
else 
    base.OnResize(e); 
} 
+0

Et la classe dérivée peut alors simplement remplacer OnResize et vous n'avez rien fait – ctacke

+0

Oui, bien sûr, mais vous le faites habituellement pour éviter de changer la taille du formulaire par erreur en utilisant le concepteur Pour ne pas lier les mains d'un développeur, veuillez lire la question où il est demandé: "il devrait avoir une taille fixe dans la vue du concepteur VS". – jmservera

0

en supposant que nous avons un bouton que ce nom soit « button1 » dans un usercontrol . Je veux, tout en changeant la taille de la commande usercontrol au moment du design, la taille de button1 soit ajustée à la taille de usercontrol.

cette propriété de travail de solution.

lors de l'événement Resize de usercontrol écrivez ceci.

private void ButtonDesigned_Resize(object sender, EventArgs e) 
    {    
     button1.Size = new Size(this.Size.Width - 2, this.Size.Height - 2); 

     // Note : this.size hint to usercontrol size 

     or 

     button1.Size = this.Size 
    } 

ma langue anglaise n'est pas bonne.je coche cette solution soit suffisante pour vous.

Questions connexes