C++ Builder5で不思議な動きをしています。
StringGridで、OptionにgoEditingを操作し、修正不可のセットをしました。
StringGrid1->Options = StringGrid1->Options >> goEditing;
その後、StringGridのどこかのセルをクリックして、そのセルをスクロールバー
で隠したり表示したりすると、修正不可セット直前にカーソルのあったセルの
内容が現れてきます。
具体例を示すと、1行3列目にカーソルのある状態で、修正不可にセットします。
次に、5行5列目をクリックした後、スクロールバーでこのセルを見えない様に
StringGridをスクロールします。
再度、5行5列目が見えるようにスクロールを戻すと、1行3列目に入っていた
内容(文字)が表示されているのです。
この時、別のセルをクリックすると、5行5列目には本来の内容(文字)が表示
されて来ます。
別のセルをクリックすると、正しい内容に戻りますので、表示だけの問題だと
思うのですが、不思議で困った現象です。
なんとか、これを回避する方法はないでしょうか?
No.2ベストアンサー
- 回答日時:
現象を確認しました。
goAlwaysShowEditorが原因です。
本来goAlwaysShowEditorはgoEditingが有効でなければ無視されるオプションですが、両者が有効であるときにgoEditingだけを動的に無効にするという状況を想定してないようです。
そのため、goEditingを無効にした直後はgoAlwaysShowEditorが判定されInpalceEditorが消されてないようです。VCLのソースを確認してないので断言できませんが、当たらずとも遠からずだと思います。
ですので対処法は「goEditingを切り替えるときはgoAlwaysShowEditorも同時に切り替える」で正解です。
なお、
//有効にする
StringGrid1->Options << goEditing << goAlwaysShowEditor;
//無効にする
StringGrid1->Options >> goAlwaysShowEditor >> goEditing;
でいけます。ストリーム演算子と同じ扱いが出来るようになってます。
有難うございました。
>ですので対処法は「goEditingを切り替えるときはgoAlwaysShowEditorも同時に切り替える」で正解です。
そうだったんですね。
以後、このようにします。
C++の記述についてもご指導ありがとうごいました。
No.1
- 回答日時:
追試してみました。
しかし、うちの環境(BCB6、BDS)では再現しませんでした。
BCB5に固有の問題かもしれません。
ご面倒でなければ、一度最低限の構成(フォーム上にStringGridとgoEditingを操作するためのコンポーネントのみ配置し、イベントハンドラもStringGridの初期化とgoEditingの操作のみにする)で、現象が発生する場合の設定、手順の詳細を補足してください。
現在BCB5が使える環境がないのでお役に立てるかどうかはわかりませんが。
ところで、
>StringGrid1->Options >> goEditing;
でいいような。BCB5はちがったけっかな?
この回答への補足
ありがとうございます。
今、テストプログラムを作って実験しています。
Optionでtrueと設定されているのは、次の項目です。
goFixedVertLine
goFixedHorzLine
goVertLine
goHorzLine
goRangeSelect
goEditing
goAlwaysShowEditor
goThumbTracking
Button2が、StringGrid修正不可の設定ボタンでして、
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Button1->Enabled = true;
Button2->Enabled = false;
StringGrid1->Options >> goEditing; // <a>
}
と記述しています。( <a>の行はご指摘の通りでうまく出来そうです。)
プログラムが起動すると、テストデータ用のファイルを読み込み、各セルに
テキストを格納します。
この状態でプログラムは操作待ちになります。
矢印キーの操作をしてみると、この現象は、
「再描画されたセルのうち、最終的にカーソルのあるセルに現れる」
ということのようです。
従って、再描画されないセル(セル全体が見えている)をクリックしても
現象は現れません。
シロートの直感で、
StringGrid1->Options << goEditing; //認める
StringGrid1->Options << goAlwaysShowEditor;
と
StringGrid1->Options >> goEditing; //認めない
StringGrid1->Options >> goAlwaysShowEditor;
の組み合わせをやってみたら、問題の現象は出なくなりました。
この違いが良く分かっていないのですが、原因が良く分からない場合、
これで逃げようかと思っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 余計なお世話的な「入力規則」?対策は? 2 2023/01/14 12:39
- Excel(エクセル) セルに設定した[コメント]、表示のON/OFFは正常なるも印刷されない! 3 2022/09/18 21:56
- Excel(エクセル) [オートフィルター]機能について 3 2023/02/04 14:32
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Excel(エクセル) 【EXCEL】=セル&セルが上手く表示できない。 7 2022/09/04 21:32
- Excel(エクセル) MSさん、シッカリしてよ~んッ! 3 2023/01/30 13:15
- Excel(エクセル) countif関数について質問 4 2022/06/14 12:11
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) エクセルVBA 任意のセルの選択時、指定のセルの値を表示 1 2023/04/21 08:13
- Visual Basic(VBA) VBA 複数のブックに同じ列を表示させる方法 2 2022/07/20 23:49
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで指定したセルのどれ...
-
貼り付けで複数セルに貼り付けたい
-
【Excel】 セルの色での判断は...
-
Excelで数式内の文字色を一部だ...
-
(Excel)数字記入セルの数値の後...
-
セルをクリック⇒そのセルに入力...
-
【エクセル】IF関数 Aまたは...
-
EXCEL VBA セルに既に入...
-
対象セル内(複数)が埋まった...
-
エクセル オートフィルタで絞...
-
セルに特定の色が付いていたら...
-
エクセル 足して割る
-
エクセルのセルの枠を超えて文...
-
【Excel】特定の文字から文字ま...
-
Excelでのコメント表示位置
-
Excel2003 の『コメント』の編...
-
複数のセルのいずれかに数字が...
-
エクセル セルの中に縦線が入っ...
-
EXCELで一番安い金額と名前を抜...
-
文字列として"(ダブルコーテー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル 足して割る
-
【エクセル】IF関数 Aまたは...
-
エクセルで指定したセルのどれ...
-
Excelで数式内の文字色を一部だ...
-
Excelでのコメント表示位置
-
貼り付けで複数セルに貼り付けたい
-
対象セル内(複数)が埋まった...
-
セルをクリック⇒そのセルに入力...
-
【Excel】 セルの色での判断は...
-
エクセルの一つのセルに複数の...
-
EXCEL VBA セルに既に入...
-
エクセル “13ヶ月”を“1年1ヶ月...
-
エクセル オートフィルタで絞...
-
エクセルのセルの枠を超えて文...
-
excelのCOUNTIF関数で、『範囲=...
-
(Excel)数字記入セルの数値の後...
-
枠に収まらない文字を非表示に...
-
Excel2003 の『コメント』の編...
-
Excel 例A(1+9) のように番地の...
-
複数のセルのいずれかに数字が...
おすすめ情報