DataGridViewとHScrollBarのバーの幅を合わせる

このQ&Aのポイント
  • DataGridViewとHScrollBarのバーの幅を合わせる方法をお知りですか?
  • DataGridViewのセル幅の変更に伴い、HScrollBarのバーの大きさも連動させたいですが、どのプロパティにどの数字を入れればよいか分かりません。
  • HScrollBarとDataGridViewを連動するコードも同時に教えていただけると助かります。
回答を見る
  • ベストアンサー

 DataGridViewとHScrollBarのバーの幅を合わせる

 DataGridViewとHScrollBarのバーの幅を合わせる  今晩は,質問させていただきます.どうぞよろしくお願いいたします.  HScrollBarでDataGridViewを連動させております。 DataGridView内のセル幅の変更に伴いバーの大きさが変更された際、 HScrollBarのバーの大きさもこれと同じにしたいのでございますが、 どのプロパティにどの数字を入れてやればよいのかが分からず、 1ヶ月ほど悩んでおりますorz  ためしに↓のようにコーディングいたしましたが、、、   Private Sub DGV1_ColumnWidthChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewColumnEventArgs) _     Handles DGV1.ColumnWidthChanged     With HScrollBar1       .Minimum = 0       .Maximum = (DGV1.Columns(0).Width + DGV1.Columns(1).Width _            + DGV1.Columns(2).Width + DGV1.Columns(3).Width _            + DGV1.Columns(4).Width + DGV1.Columns(5).Width)             '↑例えばColumnが0~5まである場合でございます。             'おそらく「.Maximum」に何か入れるのでは、、と              '推測している次第でございますが。。。     End With   End Sub ↑この場合、HScrollBarの幅がDataGridViewより小さくなったり してしまい、その状態のままHScrollBarを動かしてしまいますと、 DataGridViewを連動させることができずエラーになってしまいます。  以下、必要ないかもしれませんが、HScrollBarとDataGridViewを 連動させているコードでございます。   Private Sub HScrollBar1_Scroll(ByVal sender As Object, ByVal e As System.Windows.Forms.ScrollEventArgs) _     Handles HScrollBar1.Scroll     DGV1.FirstDisplayedScrollingColumnIndex = e.NewValue       '↑ここでHScrollBarから大きい値が入ってしまい,       ' エラー「指定された引数は、有効な値の範囲にありません」になります。   End Sub  何かよい方法がございましたら,是非ともアドバイスいただきたくお願いいたします.  もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします.

  • MKT_
  • お礼率99% (329/330)

質問者が選んだベストアンサー

  • ベストアンサー
  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.5

>>DGV1のスクロールバーと同じような動作をHScrollbarにも期待して >>おりましたので,ということは上に書かせていただきました これは基本的に無理です。 データグリッドビュー(DGV1)の列単位での位置づけのメソッド(DGV1.FirstDisplayedScrollingColumnIndex) しか用意されていません。 もし、ピクセル単位に移動したいなら データグリッドビュー(DGV1)の派生クラスをご自分で作成し、 スクロール時のイベントにて移動した幅を取得する。 のと設定する。二つのメソッドを自作しなければできません。 参考: ■DataGridViewスクロールバー表示状態の取得について http://dobon.net/vb/bbs/log3-34/20882.html 次に >>DGV1 プロパティ >>SIZE(横幅,縦幅):630,500 >>列(Column0~6 計7個×90=630) >>に対して, >>HscrollBar1 プロパティ >>最大値(Maxmaum):630 >>といたしましたところ,HscrollBar1のドラッグできる部分が >>DGV1のそれに対して非常に小さくなってしまいました. 意味がわかりません。 前回のケース1、ケース2はあくまでサンプルです。 ご自分の実現したい方法で コードを実装する必要があります。 さきに述べていますがHscrollBar1 をDGV1のスクロールバーと同じような動作をHScrollbarにも期待するのは無理です。 DGV1の列が7個のときHScrollbarの最大値を(700)として 右に動かした時の値が 100分の1 つまり0.01 倍にて整数値を取得して DGV1.FirstDisplayedScrollingColumnIndexに 整数値、0~6 が入るような計算値を設定してください。  HScrollbarが見かけ上 どのような幅にしたら最適になるのかは この最大値と横幅で決定できると思います。 >>DGV1の横スクロールバーをゆっくり右にドラッグいたしますと >>「1ピクセルずつ」動いておりますが,HScrollbar1を同様に動かしますと, D>>GV1は「1セルずつ」動きます. これは仕様です。 DGV1.FirstDisplayedScrollingColumnIndex について ご自分で理解してください。 先に 参考のHPにて説明しています。 もし、解決しているのであれば これで解決済みとしてください。 ポイント付与を忘れずにお願いします。

MKT_
質問者

お礼

 NOBNNN様 度々のアドバイスどうもありがとうございましたm(_ _)m >これは基本的に無理です。 >データグリッドビュー(DGV1)の列単位での位置づけのメソッド >(DGV1.FirstDisplayedScrollingColumnIndex) しか用意されていません。 ↑これが分かったので更に助かりました.どうもありがとうございます. 列単位の移動でどうにか,見やすくなるように頑張ってみます. >もし、解決しているのであれば これで解決済みとしてください。  はい.前の「補足」にも書かせていただいておりますが, クローズさせていただければと思います. >ポイント付与を忘れずにお願いします。  はい.おひとり様20ptしか差し上げられないのが残念でございますが, もちろん付けさせていただきます^^ この度は誠にありがとうございました!!

その他の回答 (4)

  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.4

一部不自然な部分がありますので 質問します。 >>以下、必要ないかもしれませんが、HScrollBarとDataGridViewを >>連動させているコードでございます。 >>  Private Sub HScrollBar1_Scroll(ByVal sender As Object, ByVal e As >>System.Windows.Forms.ScrollEventArgs) _ >>    Handles HScrollBar1.Scroll >>    DGV1.FirstDisplayedScrollingColumnIndex = e.NewValue       '↑ここでHScrollBarから大きい値が入ってしまい,       ' エラー「指定された引数は、有効な値の範囲にありません」になります。 >>  End Sub の部分ですが   DGV1.FirstDisplayedScrollingColumnIndex  は データグリッドの列の数を超えた値は設定できません。 以下の参考;をみればわかります。 参考: ■DataGridViewの指定した行、列までスクロールする   http://dobon.net/vb/dotnet/datagridview/scrolltorow.html データグリッドの列数が5個の場合、列の数は1番目を ZEROとしますので 0~4  の数字になるはずです。 もし、Hscroollbar を動かしてデータグリッドビューの指定した列までスクロールしたいなら Hscroollbar の最大値(Maxmum )は4です。 なぜこれより大きい値を設定しなければいけないのでしょうか?

MKT_
質問者

お礼

 どうもありがとうございます!!!!! なんとお礼を書かせていただいております間に再度 アドバイス&ご指摘いただけまして.. ( =私の理解が遅いという話しで,略 orz)  DGV1のいずれのセルにも長い文字列が入るので,左右の セルの比較がしづらくならないよう,ゆっくり横スクロール (DataGridViewのスクロールバードラッグ時のようにピクセル単位で 滑らかに)するコードを作製したかった次第でございます..  リンクをつけていただいたページも以前見させていただいた記憶が ございますが,あらためて読ませていただきますと >指定した列までスクロール と書いてくださっていますね^^; どうもありがとうございます. 入力値が過大になる原因と,双方のスクロールバーのドラッグボタンの 幅が一致しない原因はここでございますね^^  ということは,まず「DataGridViewの横スクロールをピクセル単位で 制御する方法」を掴んだ後に,タイトルの質問になってしまいますね...

MKT_
質問者

補足

(お礼後のコメントになります)  少しタイトルの内容からは想像がつきにくい問題を解決する 方向になりそうですので,NOBNNN様から > 質問します。 とコメントいただいた直後で少し端折る形になるかもしれませんが, 本質問に関してはここでクローズさせていただければと思います.  いただけた多大なコメント・アドバイスのおかげでコーディングの 方向が見えてまいりました.この度は誠にどうもありがとうございました!

  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.3

>>DataGridViewの「横スクロールバー内のドラッグできるバーの幅」と >>HScrollBarの「スクロールバー内のドラッグできるバーの幅」が合わなくなる、 説明がややこしいです スクロールバー(HscrollBar)について スクロールバーは何のためにどのような動きになるかが想像できません。 スクロールバーというのは上限値つまり最大値(Maxmaum)ですねこの値にたいして 右へスクロールさせるとその分、値が変化します。 ただそれだけの機能です。 たとえば最大値(Maxmaum:1000 として 右へ50% ずらしたら スクロールバー(HscrollBar)の 値は500が設定されます。 一方データグリッドビュー(DGV1)のするスクロールバーは 垂直と水平の2種類があります。 表示させるには プロパティのScrollBarsに 両方(Both)、水平(Horizontal)、垂直(vetical) のいずれかを設定します。  スクロールバーは 全体の列幅の合計値がデータグリッドビュー(DGV1)のSizeの横幅より小さければ 表示されなくなります。 でもスクロールできる最大幅は制限がありません。全体の列幅によってスクロールできる幅が変わります。 ==================================================================================================== 少し整理しましょう。 DGV1 プロパティ    SIZE(横幅,縦幅):500,200    SCROLL: Horizontal    MAXMUMSIZE(横幅,縦幅):1000,200    列(Column1~5)の横幅 :100 × 5個(合計は500) とした場合  当然 HscrollBar プロパティは       SIZE(横幅,縦幅):500,20 DGV1の列幅の合計と同じにする     MAXMUMSIZE(横幅,縦幅):1000,200          最大値(Maxmaum):500           です。 ______________________________________________________________________________ ■ケース1  DGV1の列(Column1~5)のいずれかの列幅を大きくした、たとえば  Column1 の幅を 200にしたとしたら DGV1 のスクロールバーの大きさは  600 です。  ですから HscrollBarの最大値(Maxmaum):600 にしなければなりません。   ■ケース2  今度は DGV1の列(Column1~5)のいずれかの列幅を大きくした、たとえば  Column1 の幅を 50にしたとしたら DGV1 のスクロールバーの大きさは  450 です。  ですから HscrollBarの最大値(Maxmaum):450 にしなければなりません。   ==================================================================================================== 上記のケース1とケース2のようにすれば問題は起こりません。 説明がわからないので 答えられません。 なんで引き算を行わないとだめなのか不自然です。

MKT_
質問者

お礼

 どうもありがとうございます!!! 本当に度々のご回答をどうもありがとうございます.m(_ _)m >少し整理しましょう。 の部分が非常に分かりやすく勉強になります^^ 今アドバイスいただいたことを一通りテストいたしておりますが, DGV1 プロパティ SIZE(横幅,縦幅):630,500 列(Column0~6 計7個×90=630) に対して, HscrollBar1 プロパティ 最大値(Maxmaum):630 といたしましたところ,HscrollBar1のドラッグできる部分が DGV1のそれに対して非常に小さくなってしまいました..  あと気がついたのですが,Column7を大きくした状態で DGV1の横スクロールバーをゆっくり右にドラッグいたしますと 「1ピクセルずつ」動いておりますが,HScrollbar1を同様に動かしますと, DGV1は「1セルずつ」動きます. DGV1のスクロールバーと同じような動作をHScrollbarにも期待して おりましたので,ということは上に書かせていただきました >Private Sub HScrollBar1_Scroll(ByVal sender As Object, ByVal e As System.Windows.Forms.ScrollEventArgs) _ >    Handles HScrollBar1.Scroll >    DGV1.FirstDisplayedScrollingColumnIndex = e.NewValue >      '↑ここでHScrollBarから大きい値が入ってしまい, >      ' エラー「指定された引数は、有効な値の範囲にありません」になります。 >  End Sub のFirstDisplayedScrollingColumnIndexが間違っている,ということのようですね...  道筋が見えてきました.アドバイスいただけたおかげでございます. 誠にありがとうございますm(_ _)m もう少し頑張ってみます!!!

  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.2

>>HScrollBarでDataGridViewを連動させております。 >>DataGridView内のセル幅の変更に伴いバーの大きさが変更された際、 >>HScrollBarのバーの大きさもこれと同じにしたいのでございますが、 >>どのプロパティにどの数字を入れてやればよいのかが分からず、 >>1ヶ月ほど悩んでおりますorz 最初の質問を解釈すると DG1のヘッダーの部分のそれぞれの列幅が変更されると スクロールバーの横幅(サイズ)がDG1の全体の列幅と合わなくなるためスクロールバーの横幅をDG1の全体の列幅と同期させたい(同じ幅にする)という質問ではないのでしょうか? >>今色々と試させていただいておりますが, >>.Size = New Size(Wd, 10) >>といたしましたところ,HScrollBar全体のサイズが変わっております. >>(↑左右の三角マークも含んだ,スクロールバー自体のサイズでございます) >>VB2005とVB2008の仕様の違いでしょうか??  解決にはなっていないということでしょうか? >>HScrollBar全体のサイズが変わっております.  そのようになるようにしました ◆最初の質問の解釈では#1の回答になると思うのですが。  解釈の違い。つまり的がはずれているようでしたら失礼しました。  

MKT_
質問者

お礼

 どうもありがとうございます!! >的がはずれているようでしたら失礼しました いえいえいえとんでもございません。アドバイスいただければ十分でございます。 Wd += DGV1.Columns(I).Width と書いていただけたので、コードもかなり綺麗になりました^^ 今後こうやって書かせていただきます。 >最初の質問を解釈すると DG1のヘッダーの部分のそれぞれの列幅が変更されると >スクロールバーの横幅(サイズ)がDG1の全体の列幅と合わなくなるため >スクロールバーの横幅をDG1の全体の列幅と同期させたい(同じ幅にする) >という質問ではないのでしょうか?  DataGridViewの「横スクロールバー内のドラッグできるバーの幅」と HScrollBarの「スクロールバー内のドラッグできるバーの幅」が合わなくなる、 でございます。  例えば、初期状態      DGV1の横スクロールバー全体の大きさ:100      HScrollBar1の  〃       :100      DGV1の横スクロールバー内のドラッグできるバーの幅:30      HScrollBar1の  〃              :30 であれば問題ないのでございますが、このお互いの「30」が一致しなくなります。orz  ここからDGV1の列幅が小さくされまして      DGV1の横スクロールバー内のドラッグできるバーの幅:30→90 となったといたしますと、      DGV1のドラッグバーをスライドさせられる量:100-90=10      HScrollBar1の  〃           :100-30=70 となりますので、HScrollBar1のバーをどんどん右へずらしていきますと、 DGV1のバーだけが先に右へ突き当たってしまい、エラーを起こしてしまいます。orz  何かよい方法は無いものでございましょうか。。。 もし何かお考えつきましたら、是非ともアドバイスいただきたくお願い申し上げます。 どうぞよろしくお願いいたします。

  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.1

質問する際には 環境を説明してください。 どのような開発ツールで 画面に配置するコントロールの配置および名称など・・・・ 質問者さまの質問は VB.NET 2005 のソースとして回答します。 以下は 実験済みです。 =========================<サンプル>============================================= Private Sub DGV1_RowHeadersWidthChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DGV1.RowHeadersWidthChanged 'データグリッド(Dg1)の左上隅にあるヘッダー セルの幅が変更された場合の処理 Call HScroll_width_set() End Sub Private Sub HScroll_width_set() With HScrollBar1 Dim Wd As Integer = DGV1.TopLeftHeaderCell.Size.Width 'データグリッド(Dg1)の左上隅にあるヘッダー セルの幅 For I As Integer = 0 To DGV1.Columns.Count - 1 Wd += DGV1.Columns(I).Width Next '.Minimum = 0 '.Maximum = Wd .Size = New Size(Wd, 0) '↑例えばColumnが005まである場合でございます。 'おそらく「.Maximum」に何か入れるのでは、、と '推測している次第でございますが。。。 End With End Sub End Class ============================================================================================================================================= ソースを見てのとおり .Maximum の設定箇所が間違っており 正しくは .Size としてあげるだけです。 それと 「'データグリッド(Dg1)の左上隅にあるヘッダー セルの幅」が考慮されていませんので処理を追加しました。 以上が回答となります。 参考: ■フォームにスクロールバーをつける http://dobon.net/vb/dotnet/form/autoscroll.html

参考URL:
http://dobon.net/vb/dotnet/form/autoscroll.html
MKT_
質問者

お礼

 どうもありがとうございます!!  開発環境はVista+VB2008になりますorz ↑いつもタイトルに書き入れておりましたが,OKWaveがリニューアルして タイトル入力項目が無くなっていたので書き忘れておりました. ご指摘どうもありがとうございますm(_ _)m  今色々と試させていただいておりますが, .Size = New Size(Wd, 10) といたしましたところ,HScrollBar全体のサイズが変わっております. (↑左右の三角マークも含んだ,スクロールバー自体のサイズでございます) VB2005とVB2008の仕様の違いでしょうか?? >「'データグリッド(Dg1)の左上隅にあるヘッダー セルの幅」が考慮されていませんので処理を追加しました。  ありがとうございます!!別のDGVでヘッダーを含むものがあるので, 参考にさせていただきます. この度はご閲覧・アドバイスいただきましてどうもありがとうございました. 

関連するQ&A

  • 【VB2008】 DataGridView_Scroll時の「縦」なのか「横」なのか区別する方法

     こんばんは,いつも勉強させていただいております. どうぞよろしくお願いいたします.  VB2008でDataGridViewを作成いたしまして,これと他のDataGridViewや ScrollBarとを連動してスクロールさせております. (下のようなコードになります.) Private Sub DGV1_Scroll(ByVal sender As Object, ByVal e As System.Windows.Forms.ScrollEventArgs) _     Handles DGV1.Scroll  DataGridViewの縦スクロールバーを動かした時のみ他のコントロールを 連動させたいのですが,上記の方法だと横スクロールバーを動かした時も 反応してしまいます... DataGridViewのイベントでそれらしきものを探したり,検索にかけたり してみましたが,見つかりませんでした.  どのような方法でも結構でございますので,DataGridViewがスクロールされた時に, それが縦か横か分かりそうな方法がございましたら, 是非ともアドバイスいただきたくお願い申し上げます.  もしお詳しい方がいらっしゃいましたら,何卒お願いいたします.

  • DataGridViewから値取得

    DataGridViewにボタンと項目2つが配置されています。 DataGridView1 DataGridView1.Columns("btn").HeaderText = "ボタン" DataGridView1.Columns("item1").HeaderText = "アイテム1" DataGridView1.Columns("item2").HeaderText = "アイテム2" ボタンを押すと、押した行のレコードを取得したいです。 ボタンのところを押下すると、 イベントハンドラで何行目か分かるサンプルをネットで見つけました。 惜しいですが、やりたいのと少し違いました。 'CellContentClickイベントハンドラ Private Sub DataGridView1_CellContentClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick Dim dgv As DataGridView = CType(sender, DataGridView) Dim test_item1 As String Dim test_item2 As String ' "btn"列ならば、ボタンがクリックされた If dgv.Columns(e.ColumnIndex).Name = "btn" Then MessageBox.Show((e.RowIndex.ToString() + "行のボタンがクリックされました。")) End If ' ここに押された行のitem1の値をセット ' test_item1 = (A) ' ここに押された行のitem2の値をセット ' test_item2 = (B) End Sub (A)、(B)に何を記述すれば値を取得できますか?

  • VB2005 DataGridViewにチェックボックスを追加する方法

    タイトル通りなのですが VB2005でDataGridViewにチェックボックスを追加したいです。 ############################################################### Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim chColumn As New DataGridViewCheckboxColmun DataGridView1.ColumnCount = 5 DataGridView1.Columns(0).HeaderText = "1" DataGridView1.Columns(1).HeaderText = "2" DataGridView1.Columns(2).HeaderText = "3" DataGridView1.Columns.Insert(4, chColumn) End Sub End Class ############################################################## Dim chColumn As New DataGridViewCheckboxColmun ↑で'型'DataGridViewCheckboxColmunが定義されていません となってしまいます。 どうすればよいでしょうか。。。。 プログラム初めて1週間の初心者なのでお手柔らかに よろしくお願いします。

  • VB2005 Datagridview の仮想モードでメモリリーク

    VB2005にてDatagridviewの仮想モードを実装しています。 DataGridviewを全件ループ処理する場合にメモリが増加します。完了してもそのままメモリが減りません。これを回避する方法がありますか?CellValueNeededはメモリを消費し続けるものなのでしょうか。 実際のプログラムでは件数が多い場合にメモリの消費が止まらずメモリ不足に陥ります。 以下は単純なコードにしたサンプルです。これでもデバッグモードで動かすと起動時20Mくらいのメモリ消費がループ処理時に100Mくらいにに増えます。 ※実際の処理でバインドしているデータ(datatable等)の方をループさせるという代替案がありますが、今回はdatagridviewから行った結果のメモリ不足についてご教授いただければと思います。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load With Me.DataGridView1 .Columns.Add("Column1", "列1") .Columns.Add("Column2", "列2") .Columns.Add("Column3", "列4") .Columns.Add("Column4", "列4") .Columns.Add("Column5", "列5") .Columns.Add("Column6", "列6") .Columns.Add("Column7", "列7") .VirtualMode = True .RowCount = 100000 End With End Sub Private Sub DataGridView1_CellValueNeeded(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DataGridViewCellValueEventArgs) _ Handles DataGridView1.CellValueNeeded e.Value = e.RowIndex.ToString & "," & e.ColumnIndex.ToString End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click For i As Integer = 0 To DataGridView1.Rows.Count - 1 DataGridView1.Rows(i).Cells(1).Value = DataGridView1.Rows(i).Cells(2).Value Next MsgBox("終了") End Sub

  • DataGridViewのコンボボックスについて

    開発環境:Visual Basic 2005 DataGridViewのDataGridViewTextBoxColumnの1行目をコンボボックスにして、 そのコンボボックスのドロップダウン幅を100に設定しようとしていますが、うまくいきません。 DataGridViewをフォームに貼り付け、以下のプログラムを実行すると、幅が120くらいになってしまいます。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load DataGridView1.Columns.Clear() DataGridView1.AllowUserToAddRows = False Dim TextColumn As New DataGridViewTextBoxColumn TextColumn.Name = "Name" TextColumn.Width = 100 Dim ComboColumn As New DataGridViewComboBoxColumn ComboColumn.Name = "Type" Dim List() As String = {"Type A", "Type B", "Type O"} ComboColumn.DataSource = List ComboColumn.DropDownWidth = 100 DataGridView1.Columns.Add(TextColumn) DataGridView1.Columns.Add(ComboColumn) For i As Integer = 1 To 5 DataGridView1.Rows.Add() Next Dim ComboCell As New DataGridViewComboBoxCell Dim NameList() As String = {"Name A", "Name B", "Name C"} ComboCell.DataSource = NameList ComboCell.DropDownWidth = 100 DataGridView1.Rows(0).Cells(0) = ComboCell End Sub どこが問題なのかどなたかご教授いただけると助かります。どうぞよろしくお願い致します。

  • イベント内で別イベントを呼ぶ方法

    早速質問させていただきます。 Form上にDataGridView(dgv)があります。 dgvのセルをマウスでダブルクリックした時に処理を入れております。 Private Sub dgv_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv.CellDoubleClick   If e.RowIndex = -1 Then     Exit Sub   End If   '//処理 End Sub このdgv上でEnterキーを押した際に、ダブルクリックしたのと同じ処理を 行いたいのですが、このような場合、どのような実装をするのが一般的なのでしょうか? 例えば、下記の様にCall dgv_CellDoubleClick(sender, e)をするとEventArgsが合わないためエラーになってしまいます。 適切な方法をご教授お願い致します。 Private Sub dgv_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles dgv.KeyDown   If e.KeyCode = Keys.Enter Then     Call dgv_CellDoubleClick(sender, e)   End If End Sub

  • DataGridViewで右寄せ左寄せが反映されない

    新規フォームにDataGridViewを追加して、 Loadイベントに以下のコードを追記したのですが、 Alignmentの部分が正しく反映されません。 1行目は左寄せ、2行目は右寄せにしたいのですが 実際は1行目2行目ともに右寄せになります。 どのようにコーディングすれば個別に設定できるのでしょうか? Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim dt As New DataTable dt.Columns.Add("AccCode") dt.Columns.Add("AccName") dt.Rows.Add(dt.NewRow()) dt.Rows(0)("AccCode") = String.Empty dt.Rows(0)("AccName") = "てすとA" dt.Rows.Add(dt.NewRow()) dt.Rows(1)("AccCode") = String.Empty dt.Rows(1)("AccName") = "てすとB" Me.dgv.DataSource = dt ' コードのテキストを右寄せ dgv.Columns("AccName").DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight dgv(0, 0).Style.Alignment = DataGridViewContentAlignment.MiddleLeft dgv(0, 1).Style.Alignment = DataGridViewContentAlignment.MiddleRight End Sub

  • VB2005EE:DataGridViewでチェックボックスを設けるには

    はじめまして DataGridView(VB2005EE)でチェックボックスを設ける方法を教えていただきたく質問させていただきました。 Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '3つの列を設定し,ABCという列名をつける DataGridView1.ColumnCount = 5 DataGridView1.Columns(0).HeaderText = "A" DataGridView1.Columns(1).HeaderText = "B" DataGridView1.Columns(2).HeaderText = "C" Dim myNewCell As New DataGridViewCheckBoxCell DataGridView1.Columns.Insert(3, New DataGridViewColumn(myNewCell)) DataGridView1.Columns.Item(3).HeaderText = "チェックボックス" DataGridView1.Columns.Item(3).Name = "識別名" DataGridView1.RowCount = 4 '最下行に管理用の行設置 End Sub End Class 手元の本を参考に上記のコードでコンパイルを行うと, >DataGridViewで釣りの例外が発生しました: >System.FormatException:セルのフォーマットされた値に間違った型が>指定されています。 >この既定のダイアログを置き換えるには,DataErrorイベントをハンド>ルしてください。 というエラーダイアログが発生します。 まだプログラミングを始めたばかりという事もあり,右も左もわかりませんが,ご教授お願い致します。

  • DataGridViewのセル編集完了後に値を設定するには

    VB.NETのDataGridViewについて質問です。 セル編集完了後に、編集した値が不正であるならその値をセル編集前に戻すというプログラムを作成しています。 しかし、現在値を正常に戻すことが出来ずに困っています。 現在は下記のように作成しています。 (1)CellBeginEditイベントを使用して、セル編集前の段階の値を「cellItem」変数に保存する (2)CellParsingイベントを使用して、保存した値で復元する。 (2)の段階で、下記の「cellItem」変数には値が入っているにも関わらず、セルに値が登録されていません。 尚、ボタンクリックイベント等で dgv.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = cellItem を行うと、正常に値が登録されました。 セル編集完了後に値を戻すにはどのようにすれば良いのでしょうか? お分かりになる方がいらっしゃいましたら宜しくお願いします 'セル編集開始前 Private Sub dgv_CellBeginEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles dgv.CellBeginEdit cellItem = dgv.Rows(e.RowIndex).Cells(e.ColumnIndex).Value End Sub 'セル編集完了後 Private Sub dgv_CellParsing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellParsingEventArgs) Handles dgv.CellParsing dgv.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = cellItem End Sub

  • DataGridViewで1行全てを選択状態にするには

    VB.NETのDataGridViewについての質問です。 DataGridViewでセルを選択した時に、そのセルの行を全て選択したいのですが、その方法がわからず困っています。 単純な方法を試してみたのですが Private Sub DataGridView_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView.CellClick DataGridView.CurrentCell = DataGridView.Rows(e.RowIndex).Cells(-1) End Sub この方法ですと、Cells(-1)の所で境界外となって上手くいかないようです。 何か良い方法がありましたら、ご教授願います