Domanda

Sto riscontrando un problema nel tentativo di ancorare una casella di testo a un modulo su tutti e 4 i lati. Ho aggiunto una casella di testo a un modulo e impostato la proprietà Multiline su True e la proprietà Anchor su Left, Right, Up e Down in modo che la casella di testo si espanda e si riduca con il modulo in fase di esecuzione. Ho anche alcuni altri controlli sopra e sotto la casella di testo.

L'ancoraggio funziona correttamente in Visual Studio 2005 (ovvero posso ridimensionare il modulo e fare in modo che i controlli si espandano e si riducano come previsto), ma quando eseguo il progetto, la parte inferiore della casella di testo viene estesa alla parte inferiore del modulo, dietro gli altri controlli che normalmente apparirebbero sotto di esso. Questo problema si verifica quando viene caricato il modulo, prima di tentare qualsiasi ridimensionamento. L'ancoraggio della casella di testo è corretto per i lati superiore, sinistro e destro; solo il fondo non funziona correttamente.

Qualcuno ne ha sentito parlare e, in tal caso, sei riuscito a trovare una soluzione?

Grazie!

UPDATE:

Ecco un po 'del codice del designer secondo la richiesta di Greg D (includo solo le cose che avevano a che fare con la casella di testo stessa, non con gli altri controlli):

Friend WithEvents txtRecommendationText1 As System.Windows.Forms.TextBox

<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
    Me.txtRecommendationText1 = New System.Windows.Forms.TextBox

    ' ...snip...

    'txtRecommendationText1

    Me.txtRecommendationText1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
                Or System.Windows.Forms.AnchorStyles.Left) _
                Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
    Me.txtRecommendationText1.Location = New System.Drawing.Point(4, 127)
    Me.txtRecommendationText1.Multiline = True
    Me.txtRecommendationText1.Name = "txtRecommendationText1"
    Me.txtRecommendationText1.Size = New System.Drawing.Size(223, 149)
    Me.txtRecommendationText1.TabIndex = 10
End Sub

UN ALTRO AGGIORNAMENTO:

La casella di testo di cui avevo originariamente pubblicato non era ereditata da un modulo di baseclass (sebbene sia stato aggiunto a una classe di controllo utente personalizzata; probabilmente avrei dovuto menzionarlo in precedenza), ma di recente ho riscontrato lo stesso problema su un set totalmente non correlato dei controlli ereditati da una forma di baseclass. È facile incolpare questi problemi su possibili bug nel framework .NET, ma sta davvero iniziando a guardarmi così.

È stato utile?

Soluzione 3

La casella di testo di cui avevo originariamente pubblicato non era ereditata da un modulo di baseclass (sebbene sia stato aggiunto a una classe di controllo utente personalizzata; probabilmente avrei dovuto menzionarlo in precedenza), ma di recente ho riscontrato lo stesso problema su un set totalmente non correlato dei controlli ereditati da una forma di baseclass. È facile incolpare questi problemi su possibili bug nel framework .NET, ma sta davvero iniziando a guardarmi così.

Altri suggerimenti

Il tuo Modulo è localizzato? Controllare i file di risorse per una voce con Textbox.Size , eliminare è e reimpostare la dimensione.
Il tuo Form è ereditato ed il Textbox sul modulo di base? Prova a impostare il modificatore di accesso Textbox su Protetto o Pubblico.
Hai implementato una logica di ridimensionamento personalizzata? Spegnilo e vedi se il problema persiste.
Hai inserito un Textbox.MinimumSize / MaximumSize ? Rimuovi o modifica il valore.

Potrebbe anche essere una combinazione di queste cose ...

Il modulo ritorna al layout previsto quando lo ridimensionate dopo che è stato inizializzato in modo strano? Inoltre, hai impostato una proprietà Height o MinimumHeight / MaximumHeight per la casella di testo?

Se possibile, alcuni frammenti del codice designer potrebbero essere utili. :)

Una possibilità che ho incontrato in passato è DPI. Se stai eseguendo / testando il tuo codice su una macchina con un'impostazione DPI diversa rispetto alla macchina su cui stai sviluppando, potresti osservare alcune cose strane.

La funzionalità di ancoraggio stabilisce essenzialmente una distanza fissa tra il bordo di un controllo e il bordo del genitore del controllo. La tua casella di testo è incorporata in un altro controllo (ad esempio un pannello) che non ha le ancore impostate correttamente? Fare clic con il tasto destro sulla casella di testo nella finestra di progettazione dovrebbe far apparire un menu che consente di selezionare anche qualsiasi controllo esistente al di sotto di esso.

Il tuo programma include una logica di ridimensionamento personalizzata o modifica la dimensione della casella di testo a livello di codice al di fuori del codice generato dal designer? Ciò potrebbe anche comportare comportamenti strani. Ho assunto la manutenzione di una serie di software nella mia organizzazione in cui gli sviluppatori originali hanno trascorso molto tempo nell'implementazione della logica di ridimensionamento (buggy) che ho dovuto strappare in modo da poter lasciare che il codice generato dal designer facesse il lavora per me.

È molto probabile a causa della proprietà 'AutoScaleMode' impostata in InitializeComponent (). Prova a impostarlo su "Nessuno" e vedi se lo risolve. Ho avuto questi problemi un paio di volte adesso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top