C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: DateGridViewとスクロールバーの連携


(過去ログ 61 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■35286 / inTopicNo.1)  DateGridViewとスクロールバーの連携
  
□投稿者/ たに (1回)-(2009/04/23(Thu) 16:37:41)

分類:[C#] 

現在タッチパネル対応のアプリケーションを作成しております。
DataGridViewの標準で出てくるスクロールバーのサイズが小さく、
サイズの変更も出来ないため、DataGridViewのScrollBarsをNoneにし、
代わりにVScrollBarでスクロールを行いたいと思っています。
VScrollBarのScrollイベントからDataGridViewのScrollイベントを
呼び出してやれば良いと考えていますが、VScrollBarの移動量等から
DataGridViewのスクロールをどのように行ってやれば良いのか
イマイチよくわかりません。
ご教授頂けるとありがたいです。

環境は
WindowsXP/VisualStudio2005(.net2.0)/C#です。
宜しくお願いします。




引用返信 編集キー/
■35290 / inTopicNo.2)  Re[1]: DateGridViewとスクロールバーの連携
□投稿者/ ぱぱいやん (2回)-(2009/04/23(Thu) 18:00:42)
ぱぱいやん さんの Web サイト
> 現在タッチパネル対応のアプリケーションを作成しております。

タッチパネルだと、規定の幅でタッチしにくいんですよね。

> 呼び出してやれば良いと考えていますが、VScrollBarの移動量等から
> DataGridViewのスクロールをどのように行ってやれば良いのか

現在表示されている左上のセルのインデックスの取得と設定の方法を調べることから始めると良いです。
スクロールバーに設定できる最大値が DataGridView の件数よりも少ない場合は比率で計算すれば良いかと思います。

引用返信 編集キー/
■35295 / inTopicNo.3)  Re[2]: DateGridViewとスクロールバーの連携
□投稿者/ たに (2回)-(2009/04/23(Thu) 18:30:05)
No35290 (ぱぱいやん さん) に返信
> 現在表示されている左上のセルのインデックスの取得と設定の方法を調べることから始めると良いです。
> スクロールバーに設定できる最大値が DataGridView の件数よりも少ない場合は比率で計算すれば良いかと思います。

お返事ありがとうございます。
返信見る前に、自分でもそうかな?と思いやってみました。
上下の矢印(SargeIncrement(Decrement))と、
空白部分(LargeIncrement(Decrement))のクリックに対する動作は出来たのですが、
バーをドラッグして上下に動かした場合の対応が出来ません。
単純にScrollイベントなのではないのでしょうか?

ソース開示したほうがいいですかね。引き続き知恵をお貸し下さい。

今度はGridViewのセルの移動でスクロールした場合に
スクロールバーを動かす方法も考えないと(T。T)
要領は一緒なんでしょうけど・・・。

余談(?):
VScrollのイベントからGridviewのイベントなんて
呼び出す必要はないですね(^^;

引用返信 編集キー/
■35296 / inTopicNo.4)  Re[3]: DateGridViewとスクロールバーの連携
□投稿者/ たに (3回)-(2009/04/23(Thu) 18:35:15)
ちょっとイベント部分のソース乗せます。
一応、上下矢印の場合が1行スクロールで、
空白部分の移動が2行スクロールさせています。

private void vScrollBar1_Scroll(object sender, ScrollEventArgs e)
{
    int MoveCnt = 0;
    int firstDispRow = gridview.FirstDisplayedScrollingRowIndex;

    // スクロールバーの移動方向
    if (e.ScrollOrientation != ScrollOrientation.VerticalScroll)
    {
        return;
    }
    // 移動量に差が無い場合。
    if (e.NewValue == e.OldValue)
    {
        return;
    }

    if ((e.NewValue - e.OldValue) > 0)
    {
        int lastDispRow = gridview.Rows.Count - 1;
        // 表示行が存在しない又は最後尾の場合は処理しない
        if (firstDispRow == -1 || lastDispRow == firstDispRow )
        {
            return;
        }
        if (e.Type == ScrollEventType.LargeIncrement)
        {
            MoveCnt = 2;
        }
        else if (e.Type == ScrollEventType.SmallIncrement)
        {
            MoveCnt = 1;
        }
    }
    else
    {
        // 表示行が存在しない又は先頭の場合は処理しない
        if (firstDispRow <= 0)
        {
            return;
        }
        if (e.Type == ScrollEventType.LargeDecrement)
        {
            MoveCnt = -2;
        }
        else if (e.Type == ScrollEventType.SmallDecrement)
        {
            MoveCnt = -1;
        }
    }
    // スクロール処理
    gridview.FirstDisplayedScrollingRowIndex = firstDispRow + MoveCnt;
}

引用返信 編集キー/
■35298 / inTopicNo.5)  Re[4]: DateGridViewとスクロールバーの連携
□投稿者/ ぱぱいやん (5回)-(2009/04/23(Thu) 18:43:34)
ぱぱいやん さんの Web サイト
僕自身スクロールバーコントロール使ったことないけど、Scrollイベントじゃなくて、ValueChanged イベントじゃないかなー?
引用返信 編集キー/
■35300 / inTopicNo.6)  Re[5]: DateGridViewとスクロールバーの連携
□投稿者/ たに (5回)-(2009/04/23(Thu) 19:19:28)
No35298 (ぱぱいやん さん) に返信
> 僕自身スクロールバーコントロール使ったことないけど、Scrollイベントじゃなくて、ValueChanged イベントじゃないかなー?

お早い返信ありがとうございます。m(__)m
えっと・・・2行で出来ました・・・
ついでにGridViewからスクロールバーの制御も簡単ですね・・・。

private void vScrollBar1_ValueChanged(object sender, EventArgs e)
{
// スクロールバーのValue値をIndexとする行を最上部に表示
gridview.FirstDisplayedScrollingRowIndex = vScrollBar1.Value;
// その行を選択状態とする。
gridview.Rows[this.dgvUseMedicine.FirstDisplayedScrollingRowIndex].Selected = true;
}

private void gridview_Scroll(object sender, ScrollEventArgs e)
{
// GridViewの最上部の行のIndexを取得
int firstDispRow = gridview.FirstDisplayedScrollingRowIndex;
// その値をセット
vScrollBar1.Value = firstDispRow;
}

「どのような操作がなされたか」を知りたい場合は
Scrollイベントを使うと言うことなのでしょうか?
単純にスクロールバーの値とリンクして何かするなら
ValueChangedイベントって事で。

ぱぱいやんさん最高のヒントありがとうございました。m(__)m


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -