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

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

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

スクロールバーとフォーカス


(過去ログ 2 を表示中)

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

■1874 / inTopicNo.1)  スクロールバーとフォーカス
  
□投稿者/ 津田子 軍曹(17回)-(2005/11/14(Mon) 18:22:05)

分類:[C#] 


分類:[C#] 

こんにちは。いつもお世話になっております。

現在スプレッドシートを作成しておりまして、フォーカスを当てられたセルにはテキストボックスを表示して入力を受け付けるようにしています。

今回ご相談したいのはこのテキストボックスの動きについてなのですが、現時点ではマウスでスクロールバーを十分に動かすとテキストボックスも一緒に流れてしまいます。

テキストボックスがスクロールバーと一緒に流れてしまわないように…といいますか、スクロールバー操作ではテキストボックスの位置は変わらず、周りのシートだけが流れていくようにしたいと思っています。

簡潔に言うと、スクロールバーを動かして
変わるもの:フォーカスを当てられているセルのカラムとローのインデックス値
変わらないもの:テキストボックスの座標

を実現させたいのですが…

今までは、あらかじめ取得しておいたテキストボックスのx,y座標をScrollBar.Scrollイベントで利用してテキストボックスを再描画という方法を試みていたのですが無情にも流れていってしまいます(テキストボックスが)。

どうかご教授お願いいたします。

0
引用返信 編集キー/
■1879 / inTopicNo.2)  Re[1]: スクロールバーとフォーカス
□投稿者/ 中博俊 神(255回)-(2005/11/14(Mon) 22:33:03)

分類:[C#] 

画面かなんかと、ポイントになりそうなソース出せませんか?

0
引用返信 編集キー/
■1882 / inTopicNo.3)  Re[2]: スクロールバーとフォーカス
□投稿者/ 津田子 軍曹(18回)-(2005/11/15(Tue) 10:30:50)

分類:[C#] 

中さん、こんにちは。お返事ありがとうございます。

> 画面かなんかと、ポイントになりそうなソース出せませんか?

選択されたセル上にテキストボックスを表示するメソッドのソースを提示させていただきます。

//スプレッドシートの格子はDrawRectangle()をfor文でまわして描画しています
/**********定義してあるメンバ*************************
int cellWidth, cellHeight; //セルの幅と高さ
int lineWidth; //格子線の太さ
int currentColumnIndex,currentRowIndex; //選択しているセルのインデックス
int IncludeClient(Rectangle rect);
//選択したセルがコントロールのクライアント領域からはみでているか調べるメソッド
******************************************************/

//選択されたセル上にテキストボックスを表示
private void EnterTextBox(int currentColumnIndex, int currentRowIndex)
{
 Rectangle rect= new Rectangle(currentColumnIndex * cellWidth,
  currentRowIndex * cellHeight, cellWidth, cellHeight - lineWidth);

 if(IncludeClient(rect) == -1)//下部がはみでているとき
 {
  AutoScrollPosition = new Point(rect.Right + lineWidth - ClientRectangle.Right,
  rect.Bottom + lineWidth - ClientRectangle.Bottom);
 }
 else if(IncludeClient(rect) == 1)//上部がはみでているとき
 {
  AutoScrollPosition = new Point(rect.Right + lineWidth - ClientRectangle.Right,
  rect.Top + lineWidth - ClientRectangle.Top);
 }

 textBox.Visible = true;
 textBox.Size = new SIze(cellWidth - lineWidth, cellHeight - lineWidth);
 textBox.Location
   = new Point(AutoScrollPosition.X + lineWidth + cellWidth * currentColumnIndex,
 AutoScrollPosition.Y + currentRowIndex * cellHeight + lineWidth);
 textBox.Focus();
}


不備・不足などがありましたらご指摘をお願いします。

0
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -