ユーザーが入力するたびに関数を実行するいくつかの NumericUpDown コントロールを含むフォームがあります。それらすべてで ValueChanged イベントを TextChanged に変更しましたが、動作している NUD.TextChanged イベントは 4 つだけで、他のすべてのイベントは ValueChanged イベントのように動作しています (すべてのソリューションを検索しましたが、ValueChanged についての言及はありません)。まったく)。動作している NUD コントロールの 1 つをコピーして貼り付けました。名前を変更し、イベントを設定しましたが、正しく機能していません。
それらは TextChanged で発生しますが、値を検証しません。
例: 最大 100、最小 1、200 を入力すると、コントロールを離れるまで 200 のままで、その後 100 に戻ります。
正常に動作しているものでは、2 を入力するとすぐに 200 になり、TextChanged イベントが発生するとすぐに 100 になります。
すべての「CausesValidation」プロパティが true に設定されていることを確認しました。
私はこれを4時間以上続けていますが、今は少しイライラしています... 70以上のコントロールをすべて使ってフォームを最初から作り直すことを考えています...
編集:
起こっていることは、適切に機能していないものであり、実行時にテキストの入力を最小値と最大値に制限していないだけであることがわかりました。
これを TextChanged イベント メソッドに追加することで、各コントロールに修正できます。
private void NUD_ValueOfF_TextChanged(object sender, EventArgs e)
{
if (NUD_ValueOfF.Value > NUD_ValueOfF.Maximum)
NUD_ValueOfF.Value = NUD_ValueOfF.Maximum;
CalculateAll();
}
しかし、おそらく想像できると思いますが、それは混乱であり、30 以上の NUD に対してそれを 1 つずつ行うのは非常に不便です。また、NUD の 4 つで正常に機能し、残りの部分では機能しない理由を理解したいのですが、理解できません。私はそれらすべてに対してまったく同じことをしました。他のフォームの NUD はすべて正常に機能しています。適切に働きたくないのは、この形にある人だけです。
編集2:
イベント ハンドラーとボタンのデザイン (機能しているものと機能していないものはまったく同じです。
//
// NUD_ValueOfF
//
this.NUD_ValueOfF.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.NUD_ValueOfF.Increment = new decimal(new int[] {
1000,
0,
0,
0});
this.NUD_ValueOfF.Location = new System.Drawing.Point(219, 56);
this.NUD_ValueOfF.Maximum = new decimal(new int[] {
1000000000,
0,
0,
0});
this.NUD_ValueOfF.Name = "NUD_ValueOfF";
this.NUD_ValueOfF.Size = new System.Drawing.Size(120, 27);
this.NUD_ValueOfF.TabIndex = 172;
this.NUD_ValueOfF.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
this.NUD_ValueOfF.Value = new decimal(new int[] {
140000,
0,
0,
0});
this.NUD_ValueOfF.TextChanged += new System.EventHandler(this.NUD_ValueOfF_TextChanged);
誰かが私に手を差し伸べてくれたら本当にありがたいです。
ありがとう
BR、
ライフブリンガー