Multi innspill i Winforms DataGrid

Problemet: hvordan du konfigurerer Datagrid, slik at det ville være i stand til å ta imot flere linjer innganger i sine vanlige TextBox celler? Det første er å gjøre RowHight store nok til å være i stand til å se mer enn en linje i en celle. Eiendommen Multi er satt til true per standard, så vi trenger ikke å endre det. Det gjenstår imidlertid problemet med å skape nye linjer med trykk "Enter" -tasten. Standarden atferd på Datagrid er å hoppe til neste celle, så det oppsto spørsmålet hvordan man skal fange og omdirigere denne hendelsen? Det burde være enkelt tenkte jeg og kastet bort timer på å finne løsningen. Først i Google, så for meg selv. Bare fant det: jeg bruker den vanlige metoden for å gjøre slike ting: utlede en ny kontroll og overstyre beskyttet methode ProcessCmdKey. Cluet er å ikke bruke SendKeys.send ( "{Enter}") fordi det er tilsynelatende omdirigert tilbake til nettet, men å endre teksten eiendommen til den underliggende tekst kontrollen. Her er kodebiten som gjør jobben: product: [C #]
public class OLDataGrid: System.Windows.Forms.DataGrid {beskyttet overstyring System.Boolean ProcessCmdKey (ref Message msg, Keys Keydata) {if ((msg .WParam.ToInt32 () == (int) Keys.Enter)) {int kolonne = this.CurrentCell.ColumnNumber; DataGridTextBoxColumn myTextBoxColumn = null; foreach (DataGridTableStyle currTableStyle i TableStyles) if (this.DataMember == currTableStyle.MappingName) {myTextBoxColumn = (DataGridTextBoxColumn) currTableStyle.GridColumnStyles [kolonne]; gå i stykker; }; if (myTextBoxColumn = null!) myTextBoxColumn.TextBox.AppendText (" \\ x0D \\ x0A "); return true; } Else tilbake base.ProcessCmdKey (ref msg, Keydata); }}
Rutenett må være bundet og bruke TableStyle (er) for bare da AFAIK den underliggende Tekst kontroll kan nås. Den kan bruke mer enn én Tablestyles: rutenettet vil automatisk sjekke om den aktuelle kolonnen eksisterer i den valgte TableStyle å hindre AV
PS Det er min første artikkel her, og jeg ville være glad for å få tilbakemelding
.!



Previous:
Next Page: