質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

解決済

TextBox[A]からTextBox[B]に移動し、[B]の方を最前面表示する。

kaisen
kaisen

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

1回答

0評価

1クリップ

2306閲覧

投稿2017/12/19 09:53

編集2022/01/12 10:58

###前提・実現したいこと
こんばんは。
C#でフォームアプリを作成しています。

実現したいことは、

TextBox[i]でテキスト入力中にshift+Enterキーを入力することで、
TextBox[i-1]に移動する。

さらに、その際、
TextBox[i-1]をフォーム内のコントロールの最前面に表示する。

というような動作をする
フォームアプリを作ることです。

###発生している問題
121: if (e.KeyCode == Keys.Enter)
122: {
123: if (e.Shift == true)
124: {
125: SendKeys.Send("+{TAB}");
126: e.Handled = true;
127: Control c = this.ActiveControl;
128: c.BringToFront();
129: }
以上の部分のコードによって、
上記のようなことが可能になると思い、実行したものの、
フォーカスがTextBox[i-1]に移り、文字は入力できるのですが、
肝心の最前面表示ができません。

###該当のソースコード

C#

1:using System; 2:using System.Collections.Generic; 3:using System.ComponentModel; 4:using System.Data; 5:using System.Drawing; 6:using System.Linq; 7:using System.Text; 8:using System.Threading.Tasks; 9:using System.Windows.Forms; 10:using System.Collections; 11: 12: 13:public delegate void tb_Click(object sender, KeyPressEventArgs e); 14: 15:namespace WindowsFormsApp1 16:{ 17: public partial class Form1 : Form 18: { 19: public Form1() 20: { 21: InitializeComponent(); 22: } 23: // ------------------------------ 24: // クラスのメンバー変数として宣言 25: // ------------------------------ 26: // ボタンのY座標 27: int y = 50; 28: int x = 50; 29: 30: //動的リストの要素の添字として使うカウンタ 31: int i = 0; 32: int k = 0; 33: 34: //テキストボックスの大きさ 35: int th = 100; 36: int tw = 100; 37: 38: // ボタンを格納しておく動的リスト 39: List<Button> buttons = new List<Button>(); 40: // テキストボックスを格納しておく動的リスト 41: List<TextBox> clist = new List<TextBox>(); 42: 43: 44: // ------------------------------ 45: // ボタン1が押された時の処理 46: // ------------------------------ 47: private void button1_Click(object sender, System.EventArgs e) 48: { 49: // ボタンObjectを作成 50: Button myButton = new Button(); 51: 52: // ボタン位置を設定 53: myButton.Location = new Point(0, y); 54: 55: // ボタンを追加 56: this.Controls.Add(myButton); 57: 58: // ボタン同士が重ならないよう、位置をすこしずらす 59: y = y + 24; 60: 61: // ボタンだけを集めた動的リストに今作ったボタンを追加 62: buttons.Add(myButton); 63: 64: buttons[i].Click += new EventHandler(button1_Click); 65: 66: i++; 67: } 68: 69: private void button1_KeyPress(object sender, KeyPressEventArgs e) 70: { 71: //if (e.KeyChar == 49)//1が押されたとき 72: 73: if (e.KeyChar == (char)Keys.R)//Rキーが押されたとき 74: { 75: // ボタンObjectを作成 76: Button myButton = new Button(); 77: 78: //myButton.Text = Console.ReadLine(); 79: 80: // ボタン同士が重ならないよう、位置をすこしずらす 81: x = x + 24; 82: 83: // ボタン位置を設定 84: myButton.Location = new Point(x, y); 85: 86: // ボタンを追加 87: this.Controls.Add(myButton); 88: 89: // ボタンだけを集めた動的リストに今作ったボタンを追加 90: buttons.Add(myButton); 91: 92: buttons[i].Click += new EventHandler(button1_Click); 93: 94: i++; 95: e.Handled = true; 96: } 97: if (e.KeyChar == (char)Keys.T)//Tキーが押されたとき 98: { 99: TextBox tb = new TextBox(); 100: tb.Multiline = true; 101: tb.Top = y; 102: tb.Left = x; 103: tb.Height = th; 104: tb.Width = tw; 105: tb.Text = "hello"; 106: this.Controls.Add(tb); 107: 108: clist.Add(tb); 109: clist[k].KeyDown += new KeyEventHandler(tb_KeyDown); 110: clist[k].Focus(); 111: clist[k].BringToFront(); 112: y = y + 24 + 2; 113: x = x + 50; 114: e.Handled = true; 115: k++; 116: } 117: } 118: private void tb_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) 119: { 120: 121: if (e.KeyCode == Keys.Enter) 122: { 123: if (e.Shift == true) 124: { 125: SendKeys.Send("+{TAB}"); 126: e.Handled = true; 127: Control c = this.ActiveControl; 128: c.BringToFront(); 129: } 130: else 131: { 132: TextBox tb = new TextBox(); 133: tb.Multiline = true; 134: tb.Top = y; 135: tb.Left = x; 136: Control c = this.ActiveControl; 137: tb.Top = c.Top + th; 138: tb.Left = c.Left + tw; 139: tb.Height = th; 140: tb.Width = tw; 141: tb.Text = "hello"; 142: this.Controls.Add(tb); 143: clist.Add(tb); 144: clist[k].KeyDown += new KeyEventHandler(tb_KeyDown); 145: 146: clist[k].Focus(); 147: clist[k].BringToFront(); 148: e.Handled = true; 149: k++; 150: } 151: } 152: if (e.Alt) 153: { 154: if (e.KeyCode == Keys.Up) 155: { 156: Control c = this.ActiveControl; 157: c.Top -= 5; 158: e.Handled = true; 159: } 160: if (e.KeyCode == Keys.Down) 161: { 162: Control c = this.ActiveControl; 163: c.Top += 5; 164: e.Handled = true; 165: } 166: if (e.KeyCode == Keys.Left) 167: { 168: Control c = this.ActiveControl; 169: c.Left -= 5; 170: e.Handled = true; 171: } 172: if (e.KeyCode == Keys.Right) 173: { 174: Control c = this.ActiveControl; 175: c.Left += 5; 176: e.Handled = true; 177: } 178: } 179: } 180: } 181:}

###試してみていること
もしかしたら、
「TextBox[i-1]にフォーカスがあること != TextBox[i-1]がアクティブであること」
なのかなと思い、その方向性で今は検索したりしています。

###補足情報(言語/FW/ツール等のバージョンなど)
環境は、
visualstudio2017 C# windowsフォームアプリケーション
です。
C言語は自作でいくつかプログラムを書いたことがありますが、
データ構造あたりまでの学習しか進んでいません。
C#は初心者です。
作りながら学ぼうとしているので、頓珍漢なことばかりして
読みづらくしてしまっていると思います。

ぜひ、知恵をお貸しいただければと思います。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。