【先着1,000名様!】1,000円分をプレゼント!

TabControlのタブをクリックしたときにイベントを発生させたいのですが、TabControlのメンバに該当するようなイベントが見つかりませんでした。

Tabpageメンバも見てみましたが無かったように思います。

TabControlのタブをクリックしたときのイベントは無いということでしょうか。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

System.Windows.Forms.TabControlの場合


選択されたTabが変更された場合ならばSelectedIndexChangedイベントですよ
単にClickされたイベントの場合は そのまま Clickイベントになると思います
    • good
    • 0
この回答へのお礼

早速のお返事ありがとうございます。
メンバを確認したところ教えていただいたイベントがありました。
てっきり、TabClickとかいうようなイベントじゃないのかしら?と勝手に想像していましたので助かりました。

ありがとうございました。

お礼日時:2009/04/10 16:36

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q【VB】タブ切り替え時のイベント

いつもお世話になります。バージョンはVB2005です。
フォームにTabControlを配置し、適当にタブ(TabPage1~3)を追加しています。
それぞれのタブを切り替えたときに発生するイベントがわかりません。(><)
Clickイベント、CursorChangedイベント、Gotfocusなどなどいろいろ試してみましたが駄目でした。

おわかりの方、どうかご教授ください。

Aベストアンサー

お世話になります。

TabPage の Enter イベントも発生しますが、
TabPage を保持している TabContorol 側でも
SelectedIndexChanged が発生します。
Shift+矢印キー
及び
マウスによるクリック、どちらも同じです。

Private Sub TabControl1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TabControl1.SelectedIndexChanged
  Console.WriteLine(Me.TabControl1.SelectedTab.Text & " が選択されていますよ")
End Sub

QDataGridViewで指定したセルの値を取得

こんにちは。

VB2008のDataGridViewで指定したセルの値を取得をする方法がわかりません。
どなたか教えてください。

Aベストアンサー

こんばんは.

 Dim Data As String
 Data = Me.DataGridView(0, 2).Value
 MsgBox(Data)

みたいな感じで取れないですかね???

QCloseとDisposeの違い

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、タイマーコントロールのイベントに記述していますと、それは実行され続けます。

これを防ぐために、Me.Dispose() を使います。すると、きれいにプロセスは終了し、イベントは発生しない模様です。

そこで、「フォームを閉じる」意味のMe.Close() をすべてMe.Dispose() に変えてしまいました。確実にプロセスを破棄出来ると思ったからです。Webで調べると、違いは「再利用できる、できないの違い」という答えがありましたが、それはきっと、ファイルやオブジェクトのことで、フォームの場合は、再びShowまたはShowDialogで表示させることは可能でしたので、特に問題は感じていませんでした。

ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。Me.Close() に変えるとうまくいきました。

わけわからなくなってきました。。。

ちなみに、その残ったフォームは、スタートアップフォームであり、別のフォームからShowまたはShowDialogメソッドで呼び出したものではありません。

ここで4つの仮説を立ててみました。

1. ShowDialogで呼び出したフォームは、Me.Dispose()、Showで呼び出した、あるいは、スタートアップフォームは、Me.Close() すれば破棄できる

2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

3. 呼び出し方ではなく、別の要因が存在する

4. 併記する必要がある場合がある

Me.Close()
Me.Dispose()

または、

Me.Dispose()
Me.Close()



どれが正しいのでしょうか?どなたがご存じの方がいらっしゃいましたら、ご教授いただけませんでしょうか? どうぞよろしくお願い申し上げます。ありがとうございました。

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、...続きを読む

Aベストアンサー

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。
Me.Close() に変えるとうまくいきました。

通常はどちらでもうまくいきます。

>2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

ShowDialogの場合は、メソッド内部で、ハンドルが破棄されているため、Close()メソッドの際にDispose()メソッドが呼び出されます。

>3. 呼び出し方ではなく、別の要因が存在する

そう思います。

>4. 併記する必要がある場合がある

インスタンスを明示的に破棄したほうがよい場合は多く存在します。
Disposeが使えるメンバはIDisposableをインターフェースとして持っているメンバです。
これらのメンバは、外部とのやり取りを行うものが多くあります。
たとえばSQLClientに含まれるようなメンバです。

外部とのコネクションを確実に破棄を保障してほしいなどという場合がありますよね、このようなときに使用します。

Using構文を使用するのとまったく同じ理由になります。
正確にはUsing構文を使用できるメンバには条件があります、IDisposableをインターフェースとして持っているメンバに限るというものです。

ほかにもガーベージコレクタによるファイナライズを伴うかどうかという違いがあります。
Disposeの場合はファイナライズが同時に行われるため、使用していたメモリ空間を開放することができます。

上記のような理由により、
Me.Close()
Me.Dispose()
は両方書いたほうがよいと思います。

蛇足ですが、
Me.Dispose()
Me.Close()
はエラーになります。
Me.Dispose()により、Me本体(インスタンス)は削除されてしまいます。
存在しないMeに対してCloseメソッドを要求することはできないためです。

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリ...続きを読む

QVB.NET DataGridView 縦スクロールバーを常に表示

VB.netについてなのですが、
DataGridViewの縦スクロールバーを常に表示したいです。
データ数によってスクロールバーが表示されたり非表示になったりしていますが、常に表示することは可能でしょうか。教えてください。

環境:
Visualstudio2005
windows XP
よろしくお願いします。

Aベストアンサー

Private vsBar As VScrollBar
Private Sub DataGridViewScrollBar_Load(ByVal sender As Object, ByVal e As EventArgs)
Me.tESTTableAdapter.Fill(Me.testdbDataSet.TEST)

For Each c As Control In dataGridView1.Controls
If TypeOf c Is VScrollBar Then
vsBar = DirectCast(c, VScrollBar)

AddHandler vsBar.VisibleChanged, AddressOf vsBar_VisibleChanged
End If
Next
End Sub
Private Sub vsBar_VisibleChanged(ByVal sender As Object, ByVal e As EventArgs)
If Not vsBar.Visible Then
'縦クロースバーを常に表示する。
Dim borderWidth As Integer = 2

vsBar.Location = New Point(Me.dataGridView1.ClientRectangle.Width - vsBar.Width, 0)
vsBar.Size = New Size(vsBar.Width, Me.dataGridView1.ClientRectangle.Height - borderWidth)
vsBar.Show()
End If
End Sub

ミスしてたらごめんなさい・・・orz

Private vsBar As VScrollBar
Private Sub DataGridViewScrollBar_Load(ByVal sender As Object, ByVal e As EventArgs)
Me.tESTTableAdapter.Fill(Me.testdbDataSet.TEST)

For Each c As Control In dataGridView1.Controls
If TypeOf c Is VScrollBar Then
vsBar = DirectCast(c, VScrollBar)

AddHandler vsBar.VisibleChanged, AddressOf vsBar_VisibleChanged
End If
Next
End Sub
Private Sub vsBar_VisibleChanged(ByVal ...続きを読む

QDataGridViewでセルクリックイベントを発生させるには

DataGridViewでセルクリックイベントを発生させるには、
デザイナからではCellClickイベントハンドラとなりますが、
プログラムコード上から発生させるにはどのようにすればよろしいでしょうか?

CurrentCellでアクティブセルを変更した時に、そこのセルをクリックさせるイベントが欲しいのですが・・

宜しくお願い致します。

Aベストアンサー

CellClickイベントハンドラの内容を別のメソッドとして作り、アクティブセルを変更した際にそのメソッドを呼び出す方法ではダメなのでしょうか?
どうしてもCellClickイベントを発生させて処理をしたいのでしょうか?

QVB.NETのDataGridで、選択行の特定の列の内容を取得したい

タイトルにあるとおり、DataGridを使用している場合、実行時に選択された行の特定の列の内容を取得するにはどのようにすればよいのでしょうか?

DataGridは複雑で、まだよくわかっていません。
よろしくお願いします。

Aベストアンサー

選択している行番号は、dataGrid1.CurrentRowIndexでわかります。
行、列を指定して各セルにアクセスするには、
dataGrid1(行番号,列番号)でいいので
dataGrid1(dataGrid1.CurrentRowIndex,列番号)
で選択されている行の特定の列の内容を取得できます。
註:番号は、0始まり

Qタブコントロールのタブ選択について

環境 
Visual Studio 2003 C#

タブコントロールのタブ選択について質問があります。

Windows Application のForm にタブコントロールを配置。
タブ1からタブ2に選択された時点でメッセージを表示し「はい」であれば、タブ2へ、「いいえ」を選択した場合は、タブ2に遷移せずタブ1のままという動きを実装したいのですが方法がわかりません。
選択前のタブインデックスを記憶して、「いいえ」を選択した場合はそのタブインデックスを選択状態にすれば可能かと思いますが、一旦タブ2に遷移しタブ1に戻る形となり見た目的に良くないような気がします。

Visual Studio 2005 では Selecting イベントで e.Cancel = true; という方法でも一旦タブ2に遷移してしまいます。

どなたか、教えてください。
宜しくお願いします。

Aベストアンサー

 こんばんは。補足頂きました。

 すんません、.Netのバージョンを確認していませんでした。
 当方が思いつく限りでは、WndProcメソッドをオーバーライドして、VC++のウィンドウプロシージャと同じ処理をするしかないように思えます。
 今当方のIEが不調でMSDNのページがスクロール出来ないのでWndProcメソッドが2003に対応しているかどうか見れないのですが、以下では駄目でしょうか。

//WM_NOTIFYメッセージのcode == TCN_SELCHANGINGをトラップする
const Int32 WM_NOTIFY = 0x004E;

//code側の定数
const Int32 TCN_SELCHANGING = -550 - 2;

//NMHDR構造体を定義する
//http://msdn.microsoft.com/en-us/library/bb775514(VS.85).aspx
[StructLayout(LayoutKind.Sequential)]
public struct NMHDR
{
public IntPtr hwndFrom;
public Int32 idFrom;
public Int32 code;
}

//ウィンドウプロシージャのオーバーライド
//http://msdn.microsoft.com/ja-jp/library/system.windows.forms.form.wndproc.aspx
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_NOTIFY:

//NMHDR* hdr = (NMHDR*)lParamの遂行
NMHDR hdr = new NMHDR();
hdr = (NMHDR)Marshal.PtrToStructure(m.LParam, hdr.GetType());

//タブが選択されている瞬間
//http://msdn.microsoft.com/en-us/library/bb760571(VS.85).aspx
if (hdr.code == TCN_SELCHANGING)
{
//タブのインデックス
if (this.tabControl1.SelectedIndex == 0)
{
//キャンセルの場合
if (MessageBox.Show("確認", "タブ2へ移動しますか?", MessageBoxButtons.YesNo) != DialogResult.Yes)
{
//Resultに1を代入してキャンセルする
m.Result = (IntPtr)1;

//処理したのでシステムに渡さないで引き返す
return;
}
}
}
break;
}

//該当しないのでシステムに処理させる
base.WndProc(ref m);
}

 こんばんは。補足頂きました。

 すんません、.Netのバージョンを確認していませんでした。
 当方が思いつく限りでは、WndProcメソッドをオーバーライドして、VC++のウィンドウプロシージャと同じ処理をするしかないように思えます。
 今当方のIEが不調でMSDNのページがスクロール出来ないのでWndProcメソッドが2003に対応しているかどうか見れないのですが、以下では駄目でしょうか。

//WM_NOTIFYメッセージのcode == TCN_SELCHANGINGをトラップする
const Int32 WM_NOTIFY = 0x004...続きを読む

QDataGridViewの、選択されている行を取り出したい

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

DataGridViewに関して、選択されているレコードをDataRow型で別フォームに渡してから、各項目をテキストボックスに表示したいのですがうまくいきません(DataRow型にこだわっているわけではないのですが、レコード1件丸ごと取得する型を他に知らないので例として挙げました)。

DataGridViewのCurrentRowプロパティや、SelectedRows(0)をDataRow型に代入する試みをしましたが、型変換できませんでした。

DataGridViewで選択されているレコード一件まるごと変数に渡す方法というのはあるのでしょうか?

ちなみに、SelectionModeはSelectFullRowに、MultiSelectはFalseにしてあります。

ご存知の方ご教授いただけると助かります。
よろしくお願いします。

Aベストアンサー

>おっしゃるとおりやってみたのですが、どうもやはり型変換ができませんでした。
>参照しているのはDataTable型なわけですから、DataRowも取り出せそうな気はするのですが。。。

えー・・・スイマセン
今度はコーディングして確認してみたところ、
なにやら、1ステップすっ飛ばしていました

下記の手順にて取得可能です

[C#]
System.Windows.Forms.DataGridViewRow dgr = this.DataGridView1.CurrentRow;
System.Data.DataRowView drv = (System.Data.DataRowView)dgr.DataBoundItem;
System.Data.DataRow dr = (System.Data.DataRow)drv.Row;

[VB2005]
Dim dgr As System.Windows.Forms.DataGridViewRow = Me.DataGridView1.CurrentRow
Dim drv As System.Data.DataRowView = CType(dgr.DataBoundItem, System.Data.DataRowView)
Dim dr As System.Data.DataRow = CType(drv.Row, System.Data.DataRow)

※最後のキャストを変更すれば、型付データセットにも対応可能のはずです

>おっしゃるとおりやってみたのですが、どうもやはり型変換ができませんでした。
>参照しているのはDataTable型なわけですから、DataRowも取り出せそうな気はするのですが。。。

えー・・・スイマセン
今度はコーディングして確認してみたところ、
なにやら、1ステップすっ飛ばしていました

下記の手順にて取得可能です

[C#]
System.Windows.Forms.DataGridViewRow dgr = this.DataGridView1.CurrentRow;
System.Data.DataRowView drv = (System.Data.DataRowView)dgr.DataBoundItem;
System.Data...続きを読む

Qデータグリッドビューの一番最初の行に列を追加したい

お世話になっています。
VB2005です。
タイトル通りなのですが、DataGridViewの一番最初の列(0列目)に列を追加したいのです。
DataGridView1.Columns.Add()
では一番最後の行に追加されてしまいます。

ヘルプやネット上を見てもわからず・・・
どなたかご存じの方教えてください。

Aベストアンサー

こんばんは。

AddではなくInsertを使います。

TextBoxColumnを追加します。

Dim TextBoxColumn As New DataGridViewTextBoxColumn
Me.DataGridView1.Columns.Insert(0, TextBoxColumn)

でとりあえず追加できます。

後はヘッダーに項目名を設定したり、列幅を設定し足してください。

Q文字列の後ろから必要分だけ削除したい。

例1 Dim str As String = "あいうえお1234"

文字列の中の1234だけ削除したい場合は、
str = str.Remove(5,4)
という風に、5文字目の後から4文字削除にすればよいのですが、

例の"あいうえお"の部分の長さが毎回処理する度に異なる場合は、
文字列の頭から何文字目という指定ができないので、”後ろから4文字を削除したい”となります。その場合は、どのようなプロパティを使えばいいのでしょうか。

.NET環境です。

Aベストアンサー

Length(str)で文字数を取得できますので、後ろから4文字目は先頭から何文字目かは計算できると思いますが、どうでしょうか?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング