[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2004/09/30(Thu) 23:08
投稿者名:pianyi
Eメール:pianyi@mail.goo.ne.jp.スパム
URL :
タイトル:
MSFlexGrid でセルを未選択状態にする
こんにちは。
はじめまして。

こんな事出来るのかどうか、または実現するにはどうしたらよいのか、
ご相談させていただきたく思います。
よろしくお願いいたします。

私のやりたい事は、MSFlexGridでセルの選択を消す方法です。

今、ダイアログからボタンをクリックすると、MSFlexGridの貼り付けてある、
ダイアログが表示されるようになっています。
選択は1行単位での選択になります。(選択モード = By Row)

そのグリッドには初期データが表示されています。
グリッドを選択する事により、その行のデータをエディットボックスに表示させ、
編集できるようにしています。

その際、一番最初に表示されたときに、どの行も選択されていない状態にしたいのです。
初期値を入れたときに、最後のアクティブセルがどこになるか明確ではないため、
行選択なのにどこか1つのセルが選択されて表示されたりしてしまいます。
また、選択されていると、セルの背景色が判らなくなってしまいます。
それを防ぎたいのです。

セルを未選択にする方法。
またはそれに順ずるなにか良い方法は無いでしょうか?

まことに申し訳ありませんが、
よろしくお願いいたします。

環境:
Windows2000 SP4
Visual Studio 6.0 SP6

投稿時間:2004/10/01(Fri) 15:49
投稿者名:kamurin
Eメール:kamurin@hotmail.com
URL :
タイトル:
Re: MSFlexGrid でセルを未選択状態にする
書き込みの内容では下記の疑問がありますが(私の読解力が無いだけか?)、
とりあえず、フォーカスをやアクティブセルを強制的にセットする処理でも加えてみてください。

一番最初に表示されたとき=MSFlexGridの貼り付けてあるダイアログが表示されたとき
ということでしょうか?

最後のアクティブセルがどこになるか明確ではないため=なぜ?

投稿時間:2004/10/02(Sat) 14:52
投稿者名:pianyi
Eメール:
URL :
タイトル:
Re^2: MSFlexGrid でセルを未選択状態にする
こんにちは。
お返事ありがとうございます。


> 書き込みの内容では下記の疑問がありますが(私の読解力が無いだけか?)、
> とりあえず、フォーカスをやアクティブセルを強制的にセットする処理でも加えてみてください。
他のコントロールにフォーカスを移動しても選択セルの色は変わりませんよね?
アクティブセルを設定してもそこの色が変わってしまいます。
私は、その「アクティブセルにすることによって色が変わってしまう」という事を
出来ないようにしたいのです。
説明が下手で申し訳ありません(TT


> 一番最初に表示されたとき=MSFlexGridの貼り付けてあるダイアログが表示されたとき
> ということでしょうか?
はい。その通りです。


> 最後のアクティブセルがどこになるか明確ではないため=なぜ?
グリッドに出力するデータによって、1行分の背景色を変えています。
背景色を変えるのはアクティブセルの背景を変える方法でループさせています。
そうすると、最後にどの行の背景色を変えたかによって、
アクティブセルの位置が変わってしまいます。
また、1行選択なのに1セル選択になってしまい、こちらが意図したGUIにならないのです。

上記理由によりグリッドにデータを全て表示した後に、
アクティブ行を指定してやればいいと思いました。
ですが、アクティブ行を指定すると、せっかく背景色を変えているのに、
ユーザーが最初に見たとき、背景色が分かりません。
(選択セルは濃い青ですから…)

そうすると、ユーザーはいちいち選択行を変更して背景色を確認しなければいけません。
そういう面倒な行為をユーザーにさせたくないのです。

このようなお答えでよろしいでしょうか。
本当に説明がへたくそで申し訳ありませんm(_)m

よろしくお願いいたします。

投稿時間:2004/10/01(Fri) 17:25
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re: MSFlexGrid でセルを未選択状態にする
初期値を入れたときに、
MSFlexGrid1.Row = 1
MSFlexGrid1.RowSel = 1
MSFlexGrid1.Col = 0
MSFlexGrid1.ColSel = MSFlexGrid1.Cols - 1
のようにして1行目を選択するようにしてみてはどうでしょうか?

投稿時間:2004/10/02(Sat) 14:58
投稿者名:pianyi
Eメール:
URL :
タイトル:
Re^2: MSFlexGrid でセルを未選択状態にする
こんにちは。
お返事ありがとうございます。

> 初期値を入れたときに、
> MSFlexGrid1.Row = 1
> MSFlexGrid1.RowSel = 1
> MSFlexGrid1.Col = 0
> MSFlexGrid1.ColSel = MSFlexGrid1.Cols - 1
> のようにして1行目を選択するようにしてみてはどうでしょうか?
この行為ですが、私も行ってみました。
その結果「kamurinさん」のお返事にも記載いたしましたが、
ユーザーが背景色の判断が一目で出来ません。
セルの選択を変更しないと背景色の確認が出来ません。


ありがとうございます。
他に良い案がありましたらよろしくお願いいたします。

投稿時間:2004/10/02(Sat) 13:11
投稿者名:るしぇ
Eメール:
URL :
タイトル:
Re: MSFlexGrid でセルを未選択状態にする
.FixedRows を作ってその行を選択するとか?

投稿時間:2004/10/02(Sat) 15:02
投稿者名:pianyi
Eメール:
URL :
タイトル:
Re^2: MSFlexGrid でセルを未選択状態にする
こんにちは。
お返事ありがとうございます。

> .FixedRows を作ってその行を選択するとか?
これなのですが、「固定行をアクティブセルにしてしまう。」
という風に受け取ったのですが正しいでしょうか?

固定セルを選択する行為自体は出来ました。
その代わり普通のセルを選択するのと一緒で背景が濃い青に変わってしまいました。
また、他の行(非固定行)を選択すると、固定行の色が元(灰色)に戻ってしまいます。

これはこれで、「ん〜見栄えが…」という結論に達しました。

ありがとうございます。
他に良い案がありましたらよろしくお願いいたします。

投稿時間:2004/10/03(Sun) 07:47
投稿者名:るしぇ
Eメール:
URL :
タイトル:
Re^3: MSFlexGrid でセルを未選択状態にする
> 固定セルを選択する行為自体は出来ました。
> その代わり普通のセルを選択するのと一緒で背景が濃い青に変わってしまいました。
> また、他の行(非固定行)を選択すると、固定行の色が元(灰色)に戻ってしまいます。
>
> これはこれで、「ん〜見栄えが…」という結論に達しました。
それは固定行を選んだ時にプロパティ変更して行選択解除するとか…
調整できることでは無いんですか?

投稿時間:2004/10/04(Mon) 12:36
投稿者名:pianyi
Eメール:
URL :
タイトル:
Re^4: MSFlexGrid でセルを未選択状態にする
こんにちわ。
お返事ありがとうございます。

> それは固定行を選んだ時にプロパティ変更して行選択解除するとか…
> 調整できることでは無いんですか?
固定行をクリックされたときに、
行の選択を解除して1セル選択にする。
で、非固定行が選択されたときに1行選択に戻す。
こういう処理の事ですよね。

この方法だと、なんか良い感じがします。
そうすると、最初に開いた画面だと、1列目の固定行を選択しておけば、
問題なさそうです。
エクセルと比べると多少違和感が出てしまいますが、その変は妥協点ですね。


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

投稿時間:2004/10/02(Sat) 17:20
投稿者名:Say
Eメール:
URL :
タイトル:
Re: MSFlexGrid でセルを未選択状態にする
選択時の背景色の制御はシステムで行ってますから、
デスクトップで右クリックして、画面のプロパティのデザインタグで
変更することが可能ですが、すべてのアプリに適用されます。

単に、選択行の反転状態をユーザに見せたくないだけなら、
最上行にかぶせるようにPictureBoxなどを配置して隠し、
そこを選択行にするとか。

投稿時間:2004/10/04(Mon) 15:01
投稿者名:pianyi
Eメール:
URL :
タイトル:
Re^2: MSFlexGrid でセルを未選択状態にする
こんにちは。
お返事ありがとうございます。

> 選択時の背景色の制御はシステムで行ってますから、
> デスクトップで右クリックして、画面のプロパティのデザインタグで
> 変更することが可能ですが、すべてのアプリに適用されます。
>
> 単に、選択行の反転状態をユーザに見せたくないだけなら、
> 最上行にかぶせるようにPictureBoxなどを配置して隠し、
> そこを選択行にするとか。
なるほど…
でもこれにしてしまうと、カラムの横幅とかが変更出来ません。
カラム幅の変更を考えると、ちょっときついですね。

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

投稿時間:2004/10/04(Mon) 01:36
投稿者名:水無月
Eメール:
URL :
タイトル:
Re: MSFlexGrid でセルを未選択状態にする
次のやり方はいかがでしょうか?(外していたらごめんなさいです)
「行の選択」状態を、プロシージャを作成してそれらしく見せる、というやり方です
次のとおりです。

該当フォームのモジュール先頭に
Private myLoad as Boolean'ユーザが行を変えた場合True、「行選択」プロシージャ実行中はFalse
Private myCol as Integer'列の記憶値
Private myColor as Long'セルの背景色

MSFlexGrid1_RowColChangeに以下を書き込む
     If myLoad=False then Exit Sub'「行選択」プロシージャ実行中は無視
   myLoad=False
     行選択 True'通常の「行選択」プロシージャを実行
     myLoad=True

次のプロシージャを追加
Private Sub 行選択(Sentaku as Boolean)
     if myLoad=False then Exit Sub
     With MSFlexGrid1
          .HighLight=0
          .Visible=False'表示を消す
          .myCol=.Col'列を記憶
          '■■行選択状態はTrue
          If Sentaku=True then
               myColor=&H00FF0000&'セルの背景色を青にする→好みで色を変えて下さい
               .FocusRect=1'好みで2でもOk
          '■■行選択を解除する場合はFalse
          Else
               myColor=&H80000005&'セルの背景色を白にする
               .FocusRect=0
          End If

          For i=0 to .Cols-1
               .CellBackColor=myColor
          Next
          .Col=myCol
          .Visible=True
     End With
     myLoad=True
End Sub

もし修正状態で、行の選択をしたくない場合は、「行選択 False」と書き込んで実行し、
終わったら「行選択 True」を実行します

投稿時間:2004/10/04(Mon) 14:55
投稿者名:pianyi
Eメール:
URL :
タイトル:
Re^2: MSFlexGrid でセルを未選択状態にする
こんにちわ。
お返事ありがとうございます。

> 次のやり方はいかがでしょうか?(外していたらごめんなさいです)
> 「行の選択」状態を、プロシージャを作成してそれらしく見せる、というやり方です
中略
> もし修正状態で、行の選択をしたくない場合は、「行選択 False」と書き込んで実行し、
> 終わったら「行選択 True」を実行します
これって、
「セル選択&色変え処理をMSFlexGridに任せるのではなく、全部自分で処理をしてしまう。」
と言う事ですよね?

ぜんぜん考えていませんでした。
面倒ですが、ここまで書いて頂いたのですごく楽になります。

結論としては、
「MSFlexGridの中にある処理では無理だから、自分で書くしかない。」
と言う事ですね。

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

投稿時間:2004/10/05(Tue) 00:13
投稿者名:水無月
Eメール:
URL :
タイトル:
Re: MSFlexGrid でセルを未選択状態にする
> 「セル選択&色変え処理をMSFlexGridに任せるのではなく、全部自分で処理をしてしまう。」
> と言う事ですよね?
フレキシブルグリッドは、個人的には「書き方次第でいろんなことが出来る純正部品」と考えていま
す。つまり文字通り自由度が高い部品です。
今回のものは、アクティブの行を目立たせるためにやっている方法です。
アイディア次第でカラフルなインターフェイスに出来るので好んで使っています。
このサイトのサンプルにもあるように工夫すればグリッドへの直接入力も出来ますしね。
なんでも部品側でやってくれるヤツではないのでちょいと大変だったりします。。。

(お詫び)
>    (誤)For i=0 to .Cols-1
>               .CellBackColor=myColor
>          Next
   (正)
          For i=0 to .Cols-1
                .Col=i'←ここの部分が抜けてました m(__)m
                .CellBackColor=myColor
          Next