Bonjour tout le monde. J'ai besoin dans mon application de pouvoir saisir uniquement des données numériques dans des TextBox mais aussi des DataGridView. Pour les TextBox, je me suis créé un composant en suivant ce tutoriel du site et ça fonctionne bien. Je suis ensuite allé jeter un oeil chez msdn histoire de voir comment customiser les dataGridView avec un MaskedTextBox et aussi un DateTimePicker. Je décide d'adapter la méthode à mon TextBox perso.
La compilation se passe bien, je peux ajouter une colonne au datagridview sans problème, mais lorsque j'essaie de l'éditer, il me lève une exception "NullReferenceException" sur cette partie là du code :
qui se trouve dans la classe DataGridViewTextBoxExtCell :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle) { DataGridViewTextBoxExtEditingControl dGVtBExtec_; DataGridViewTextBoxExtColumn dGVtBExtcol_; DataGridViewColumn dGVcol_; base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle); dGVtBExtec_ = this.DataGridView.EditingControl as DataGridViewTextBoxExtEditingControl; dGVcol_ = this.OwningColumn; if (dGVcol_ is DataGridViewTextBoxExtColumn) { dGVtBExtcol_ = dGVcol_ as DataGridViewTextBoxExtColumn; dGVtBExtec_.DecimalSeparator = this._decimalSeparator; // erreur NullReferenceException dGVtBExtec_.GroupSeparator = this._groupSeparator; dGVtBExtec_.MaxIntegers = this._maxIntegers; dGVtBExtec_.MaxDecimals = this._maxDecimals; dGVtBExtec_.Suffix = this._suffix; dGVtBExtec_.Text = (string)this.Value; } }
Pourriez vous m'aider ? Je ne suis pas très fort en control custom mais je suis prêt à apprendre. Merci d'avance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105 using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Globalization; namespace ControlsExt { class DataGridViewTextBoxExtCell : DataGridViewTextBoxCell { private char _decimalSeparator; private char _groupSeparator; private int _maxIntegers; private int _maxDecimals; private string _suffix; private DataGridViewTriState _allowNegative; public virtual char DecimalSeparator { get { return this._decimalSeparator; } set { this._decimalSeparator = value; } } public virtual char GroupSeparator { get { return this._groupSeparator; } set { this._groupSeparator = value; } } public virtual int MaxIntegers { get { return this._maxIntegers; } set { this._maxIntegers = value; } } public virtual int MacDecimals { get { return this._maxDecimals; } set { this._maxDecimals = value; } } public virtual string Suffix { get { return this._suffix; } set { this._suffix = value; } } public virtual DataGridViewTriState AllowNegative { get { return this._allowNegative; } set { this._allowNegative = value; } } public DataGridViewTextBoxExtCell() : base() { this._decimalSeparator = NumberFormatInfo.CurrentInfo.NumberDecimalSeparator[0]; this._groupSeparator = NumberFormatInfo.CurrentInfo.NumberGroupSeparator[0]; this._maxIntegers = 4; this._maxDecimals = 2; this._suffix = ""; this._allowNegative = DataGridViewTriState.NotSet; this.Style.Format = "C2"; } public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle) { DataGridViewTextBoxExtEditingControl dGVtBExtec_; DataGridViewTextBoxExtColumn dGVtBExtcol_; DataGridViewColumn dGVcol_; base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle); dGVtBExtec_ = this.DataGridView.EditingControl as DataGridViewTextBoxExtEditingControl; dGVcol_ = this.OwningColumn; if (dGVcol_ is DataGridViewTextBoxExtColumn) { dGVtBExtcol_ = dGVcol_ as DataGridViewTextBoxExtColumn; dGVtBExtec_.DecimalSeparator = this._decimalSeparator; dGVtBExtec_.GroupSeparator = this._groupSeparator; dGVtBExtec_.MaxIntegers = this._maxIntegers; dGVtBExtec_.MaxDecimals = this._maxDecimals; dGVtBExtec_.Suffix = this._suffix; dGVtBExtec_.Text = (string)this.Value; } } public override Type EditType { get { return typeof(DataGridViewTextBoxEditingControl); } } } }
Partager