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

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

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

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

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

Q&A

解決済

2回答

31905閲覧

dataGridViewでフォーカスを移動させないセルを作成したい。

fender0131

総合スコア121

C#

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

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

0グッド

1クリップ

投稿2016/01/12 09:02

編集2016/01/12 09:04

いつも大変お世話になっております。

dataGridViewでフォーカスを移動させないセルを作成したいのですが、アドバイスいただけないでしょうか?
以下の図で赤枠にはフォーカスを移動させず、番号通りにフォーカスを動かしたいと思っております。

試した方法としましては、

1.TabStopをフォーカス移動させたくないセルに当てはめてみました。
→ Textbox等には使用できるが、dataGridviewには対応していないとの事でした。

2.フォーカス移動させないセルにフォーカスが移った際に、フォーカス移動させるセルにフォーカスを移す。

if(dataGridView1.CurrentCellAddress.X == 0 && dataGridView1.CurrentCellAddress.Y == 0)
{
dataGridView1[1, 0].Focus();
}

→ エラーが発生しました。

何かいい方法ありませんでしょうか?
お手数おかけして申し訳ございませんが、ご指導ご鞭撻の程よろしくお願い致します。

イメージ説明

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

こういうUIは作らないので間違っているかもしれませんが、FocusじゃなくてCurrentCellで飛ばしてみてはどうでしょう?

Control.Focus メソッドには

Focus は、主にカスタム コントロールの作成者が使用するための下位メソッドです。代わりに、アプリケーション プログラマは、子コントロールには Select メソッドまたは ActiveControl プロパティ、フォームには Activate メソッドを使用する必要があります

みたいにも書かれているのでメソッドの選択にも注意しましょう

つかエラーが発生しましたって書くなら、発生したエラーくらいは貼りましょう
そしてそのエラーメッセージで検索してみましょう

投稿2016/01/12 21:33

dojikko

総合スコア3939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fender0131

2016/01/13 05:57

お答えありがとうございました。 CurrentCellで解決できました。 的確なアドバイス感謝申し上げます。 エラーの内容は質問がごちゃごちゃしてしまいそうだったので省かせて頂きました。 分かる人にはわかるエラー内容でしたもので。
guest

0

ベストアンサー

DataGridView[x, y]は、DataGridViewCellを返します。
DataGridView.Item プロパティ (Int32, Int32)

そして、DataGridViewCellにはFocus()メソッドがありません。
DataGridViewCell メソッド

なので

csharp

1dataGridView1[1, 0].Focus();

はエラーになります。

DataGridViewのフォーカスが当たったセルを変更したい場合は、dojikkoさんのおっしゃるようにDataGridView.CurrentCellを使用します。
DataGridView.CurrentCell プロパティ

例えば、こんな感じです。

csharp

1if (dataGridView1.CurrentCellAddress.X == 0) 2{ // 0番目の列のいずれかのセルにフォーカスがある場合 3 // 1番目の列にフォーカスを移動する(行は移動しない) 4 dataGridView1.CurrentCell = dataGridView1[1, dataGridView1.CurrentCellAddress.Y]; 5} 6else if (dataGridView1.CurrentCellAddress.Y == 0 && 7 2 <= dataGridView1.CurrentCellAddress.X && dataGridView1.CurrentCellAddress.X <= 5) 8{ // 1行目の2~5番目の列にフォーカスがある場合 9 // 6番目の列にフォーカスを移動する(行は移動しない) 10 dataGridView1.CurrentCell = dataGridView1[6, dataGridView1.CurrentCellAddress.Y]; 11}

投稿2016/01/13 05:48

編集2016/01/13 05:49
alg

総合スコア2019

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fender0131

2016/01/13 06:01

お答えありがとうございます。 ご丁寧にソースコードまで提示して頂きありがとうございます。 エラーの原因・プログラムの動き共に大変参考になりました。 自分のコードがだいぶ汚いので、alg様のコードと照らし合わせながら、見やすくしていきたいと思います。 ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問