前提・実現したいこと
VisualStudioでWindowsFormAppを勉強しているものです。
発生している問題・エラーメッセージ
PictureBoxに線を書き出すアプリを作成したのですが、マウスでクリック操作すると上手くPictureBoxに線が書き出されるのですが、
キーボードでEnterを押すと書き出された線がすぐに消えてしまいます。
エンターキー操作でもクリック操作と同じ結果を得るにはどうすればよろしいのでしょうか?
visual C#
### 該当のソースコード using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace BoxMaterialApp { public partial class Form5 : Form { //x軸,y軸の始点の決定 int x = 100; int y = 20; //ボックスの高さ、テキストボックス1 private double box_h = 0; //ボックスと扉の下面の隙間、テキストボックス2 private double gap = 0; //扉の高さ、テキストボックス3 private double door_h = 0; //扉下面からハンドル上面までの高さ、テキストボックス4 private double handle_h = 0; //上面ガーター部の曲げの値、テキストボックス5 private double garter_over = 0; //下面ガーター部の曲げの値、テキストボックス6 private double garter_under = 0; public Form5() { InitializeComponent(); //ピクチャーボックスをクリア var g = pictureBox2.CreateGraphics(); g.Clear(Color.WhiteSmoke); //ボタンを隠す button2.Visible = false; label1.Visible = false; textBox1.Visible = false; button3.Visible = false; label2.Visible = false; textBox2.Visible = false; button4.Visible = false; label3.Visible = false; textBox3.Visible = false; button5.Visible = false; label4.Visible = false; textBox4.Visible = false; button6.Visible = false; label5.Visible = false; textBox5.Visible = false; button7.Visible = false; label6.Visible = false; textBox6.Visible = false; button8.Visible = false; comboBox1.Visible = false; label7.Visible = false; label8.Visible = false; } private bool checkValue() { //テキストボックスの値をdouble型に変換してフィールドに格納 //成功すればtrueを返す try { box_h = Convert.ToDouble(textBox1.Text); return true; } //int型に変換できないときはメッセージを送信 //falseを返す catch { MessageBox.Show("半角数字で入力してください。", "エラー"); return false; } //テキストボックスをクリアする。 finally { textBox1.Clear(); } } private bool checkValue2() { //テキストボックスの値をdouble型に変換してフィールドに格納 //成功すればtrueを返す try { gap = Convert.ToDouble(textBox2.Text); return true; } //int型に変換できないときはメッセージを送信 //falseを返す catch { MessageBox.Show("半角数字で入力してください。", "エラー"); return false; } //テキストボックスをクリアする。 finally { textBox2.Clear(); } } private void button1_Click(object sender, EventArgs e) { //ボタンを隠す button1.Visible = false; //ボタンの表示 button2.Visible = true; label1.Visible = true; textBox1.Visible = true; //カーソルのフォーカス textBox1.Focus(); // button2 を [承諾] ボタンに設定する this.AcceptButton = this.button2; //ピクチャーボックスの宣言 var g = pictureBox2.CreateGraphics(); g.Clear(Color.WhiteSmoke); //太線の宣言 var bold = new Pen(Color.Black, 2); //本体フレーム(上)を表示 var points1 = new Point[5]; points1[0] = new Point(x, y); points1[1] = new Point((x + 50), y); points1[2] = new Point((x + 50), (y + 50)); points1[3] = new Point((x + 75), (y + 50)); points1[4] = new Point((x + 75), (y + 25)); g.DrawLines(bold, points1); //本体フレーム(下)を表示 var points2 = new Point[5]; points2[0] = new Point(x, (y + 300)); points2[1] = new Point((x + 50), (y + 300)); points2[2] = new Point((x + 50), (y + 250)); points2[3] = new Point((x + 75), (y + 250)); points2[4] = new Point((x + 75), (y + 275)); g.DrawLines(bold, points2); //扉表示 var points3 = new Point[4]; points3[0] = new Point((x + 60), (y + 10)); points3[1] = new Point((x + 85), (y + 10)); points3[2] = new Point((x + 85), (y + 290)); points3[3] = new Point((x + 60), (y + 290)); g.DrawLines(bold, points3); //縦線の寸法線を表示 g.DrawLine(Pens.Blue, (x + 95), y, (x + 140), y); g.DrawLine(Pens.Blue, (x + 130), y, (x + 130), (y + 300)); g.DrawLine(Pens.Blue, (x + 95), (y + 300), (x + 140), (y + 300)); } private void button2_Click(object sender, EventArgs e) { if (checkValue()) { //ボタンを隠す button2.Visible = false; label1.Visible = false; textBox1.Visible = false; //ボタンの表示 button3.Visible = true; label2.Visible = true; textBox2.Visible = true; //カーソルのフォーカス textBox2.Focus(); // button3 を [承諾] ボタンに設定する this.AcceptButton = this.button3; //ピクチャーボックスをクリア var g = pictureBox2.CreateGraphics(); g.Clear(Color.WhiteSmoke); //太線の宣言 var bold = new Pen(Color.Black, 2); //本体フレーム(下)を表示 var points2 = new Point[5]; points2[0] = new Point(x, (y + 200)); points2[1] = new Point((x + 50), (y + 200)); points2[2] = new Point((x + 50), (y + 150)); points2[3] = new Point((x + 75), (y + 150)); points2[4] = new Point((x + 75), (y + 175)); g.DrawLines(bold, points2); //扉表示 var points3 = new Point[3]; points3[0] = new Point((x + 85), (y + 50)); points3[1] = new Point((x + 85), (y + 190)); points3[2] = new Point((x + 60), (y + 190)); g.DrawLines(bold, points3); //縦線の寸法線を表示 g.DrawLine(Pens.Blue, (x + 95), (y + 190), (x + 140), (y + 190)); g.DrawLine(Pens.Blue, (x + 130), (y + 190), (x + 130), (y + 200)); g.DrawLine(Pens.Blue, (x + 95), (y + 200), (x + 140), (y + 200)); } } } }
//作業しながらでしたので追加のコードがあります。
//原因が分からず発見したのも完成後でしたので全文載せさせていただきまいした。
//よろしくおねがいいたします。
試したこと
クリック操作とエンター操作はデフォルトで同じ操作になっているという記事を見つけて行き詰ってしまいました。
ご教授お願いいたします。
補足情報(FW/ツールのバージョンなど)
Microsoft Visual Studio Community 2019
Version 16.5.0
.NET Framework version 4.8.03752
回答2件
あなたの回答
tips
プレビュー