L'entrée multiligne en winforms datagrid


Le problème: comment faire pour configurer la grille de données de sorte qu'il serait en mesure d'accepter multiligne entrées dans leur zone de texte standard de cellules? La première chose est de faire RowHight assez grand pour être en mesure de voir plus d'une ligne dans une cellule. La propriété Multiline est définie sur true par défaut, de sorte que nous n'avons pas besoin de le changer.

Il reste cependant le problème de la création de nouvelles lignes avec appuyez sur “Entrée”. Le comportement standard à DataGrid est pour passer à la cellule suivante, de sorte qu'il se pose la question de savoir comment les attraper et de les rediriger cet événement?

Qui devrait être facile que je pensais et gaspillé des heures pour trouver la solution. Au premier dans Google, puis par moi-même. Viens de trouver ça:

j'utilise la méthode ordinaire pour faire ce genre de choses: tirer un nouveau contrôle et de remplacer les protégés methode ProcessCmdKey. L'idée est de ne pas utiliser SendKeys.send (“{Enter}”), car il est apparemment redirigé vers la grille, mais de modifier le Texte de la propriété du sous-jacent de contrôle de Texte directement. Voici l'extrait de code qui fait le travail:

[C#]

public class OLDataGrid : Système.De Windows.Les formulaires.DataGrid
{
protected override Système.Boolean ProcessCmdKey (réf Message msg, Touches keyData)
{
if (msg.WParam.ToInt32() == (int) de la télécommande.Entrez))
{
int colonne = ce.CurrentCell.ColumnNumber
DataGridTextBoxColumn myTextBoxColumn = null
foreach (DataGridTableStyle currTableStyle dans TableStyles)
if (ce.DataMember == currTableStyle.MappingName)
{
myTextBoxColumn =
(DataGridTextBoxColumn) currTableStyle.GridColumnStyles[colonne]
break
}
if (myTextBoxColumn != null)
myTextBoxColumn.Zone de texte.AppendText('\x0D\x0A')
return true
}
else
de retour de la base.ProcessCmdKey(réf msg, keyData)
}
}

La grille doit être lié et de l'utilisation TableStyle(s) parce que seulement alors autant que je sache, le Texte de base de contrôle peut être consulté. Il peut utiliser plus d'un Tablestyles: la grille de vérifier automatiquement si le courant colonne existe dans le choisi TableStyle pour éviter AV.

PS & #39 s mon premier article ici, et je serais heureux de recevoir vos commentaires!









L'entree multiligne en winforms datagrid


L'entree multiligne en winforms datagrid : Plusieurs milliers de conseils pour vous faciliter la vie.


Le probleme: comment faire pour configurer la grille de donnees de sorte qu'il serait en mesure d'accepter multiligne entrees dans leur zone de texte standard de cellules? La premiere chose est de faire RowHight assez grand pour etre en mesure de voir plus d'une ligne dans une cellule. La propriete Multiline est definie sur true par defaut, de sorte que nous n'avons pas besoin de le changer.

Il reste cependant le probleme de la creation de nouvelles lignes avec appuyez sur “Entree”. Le comportement standard a DataGrid est pour passer a la cellule suivante, de sorte qu'il se pose la question de savoir comment les attraper et de les rediriger cet evenement?

Qui devrait etre facile que je pensais et gaspille des heures pour trouver la solution. Au premier dans Google, puis par moi-meme. Viens de trouver ça:

j'utilise la methode ordinaire pour faire ce genre de choses: tirer un nouveau controle et de remplacer les proteges methode ProcessCmdKey. L'idee est de ne pas utiliser SendKeys.send (“{Enter}”), car il est apparemment redirige vers la grille, mais de modifier le Texte de la propriete du sous-jacent de controle de Texte directement. Voici l'extrait de code qui fait le travail:

[C#]

public class OLDataGrid : Systeme.De Windows.Les formulaires.DataGrid
{
protected override Systeme.Boolean ProcessCmdKey (ref Message msg, Touches keyData)
{
if (msg.WParam.ToInt32() == (int) de la telecommande.Entrez))
{
int colonne = ce.CurrentCell.ColumnNumber
DataGridTextBoxColumn myTextBoxColumn = null
foreach (DataGridTableStyle currTableStyle dans TableStyles)
if (ce.DataMember == currTableStyle.MappingName)
{
myTextBoxColumn =
(DataGridTextBoxColumn) currTableStyle.GridColumnStyles[colonne]
break
}
if (myTextBoxColumn != null)
myTextBoxColumn.Zone de texte.AppendText('\x0D\x0A')
return true
}
else
de retour de la base.ProcessCmdKey(ref msg, keyData)
}
}

La grille doit etre lie et de l'utilisation TableStyle(s) parce que seulement alors autant que je sache, le Texte de base de controle peut etre consulte. Il peut utiliser plus d'un Tablestyles: la grille de verifier automatiquement si le courant colonne existe dans le choisi TableStyle pour eviter AV.

PS & #39 s mon premier article ici, et je serais heureux de recevoir vos commentaires!


L'entrée multiligne en winforms datagrid

L'entrée multiligne en winforms datagrid : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation