Se stai spegnendo AutoSize
su un controllo, deve essere un Label
, dal momento che TextBox
non ha una proprietà AutoSize
. La proprietà TextAlign di un Label
è di tipo ContentAligment, quindi è possibile impostare l'allineamento orizzontale e verticale.
Per vari motivi noiosi, i riquadri di testo in Windows hanno lo scopo di regolare automaticamente le loro altezze sul carattere utilizzato. Per controllare le altezze e centrare verticalmente il testo, puoi creare rapidamente un UserControl personalizzato con cui puoi sostituire tutte le tue caselle di testo.
Sul controllo utente, impostare BorderStyle su Fixed3D e BackColor su System.Window. Aggiungi un TextBox e imposta il suo BorderStyle su Nessuno. Nell'evento Ridimensiona per il controllo, aggiungi il codice che rende il TextBox della stessa larghezza dell'area client del controllo utente (che conta i pixel del bordo) e lo allinea a sinistra (ovvero) e lo centra verticalmente (ad esempio textBox1.Top = (this.Height - textBox1.Height)/2;
).
Infine, aggiungi al controllo utente qualsiasi proprietà ed eventi di tipo TextBox necessari (probabilmente solo Testo e TextChanged, suppongo) e collegali in modo che passino al TextBox all'interno del tuo controllo, come questo :
public string Text
{
get
{
return textBox1.Text;
}
set
{
textBox1.Text = value;
}
}
Se si voleva ottenere super-fantasia con questo, si potrebbe anche sostituire proprietà TextAlign di controllo utente con uno che è in realtà di tipo ContentAlignment (come il Label) e quindi allineare il TextBox interno da abbinare.
Questo stesso approccio funzionerà con un ComboBox, anche se apparirà leggermente strano. Con ComboBox, si imposta la proprietà FlatStyle su Flat, altrimenti si gestisce lo stesso come un TextBox. Sembrerà strano perché la casella freccia a discesa non sarà abbastanza nella parte superiore e inferiore del pannello.
Proprio come una FYI, esiste infatti una proprietà AutoSize su TextBoxes. Semplicemente non verrà visualizzato nella finestra delle proprietà o completato automaticamente a causa di alcune decorazioni degli attributi. Ma myTextBox.AutoSize = false; verrà compilato e inserendolo nel costruttore di un controllo ereditato si otterrà una casella di testo ridimensionabile. – Clyde
Notato.Sono passati anni da quando ho smesso di provare a rendere i controlli di Windows diversi dagli standard, quindi sono un po 'arrugginito. È interessante notare che l'Intellisense dice "Questa proprietà non è rilevante per questa classe", anche se ovviamente * è * (impostarla su false rende effettivamente l'altezza regolabile). – MusiGenesis
Suppongo che la risposta più semplice sia: passare a WPF. Tutto ha una proprietà VerticalContentAlignment e HorizontalContentAlignment. – MusiGenesis