プログラム初心者です。
Visual Studio 2019 で C# を使用して Windowsフォームアプリでオリジナルのテキストエディタを作成中です。
テキストボックスのスクロールバーの位置を記憶しておいて、再起動後などに復元したいと思ったので下記の記事を参考に試してみましたが、リッチテキストボックスでは正常に動作して、テキストボックスでは動作しませんでした。
http://pineplanter.moo.jp/non-it-salaryman/2017/11/23/csharp-scroll-control/
しかし同じようなことを試している別の記事ではテキストボックスで実装されています。
http://seshikanai.blog.fc2.com/blog-entry-4.html
ということは何か私の方に問題があるのでしょうか‥
とは言えコードは参考記事そのままになります。
csharp
1// スクロールバーの位置を取得&復元するための関数 2[DllImport("USER32.dll")] 3public static extern IntPtr SendMessage( 4 IntPtr hWnd, Int32 Msg, Int32 wParam, ref Point lParam); 5 6private Point pos = new Point(0, 0); 7 8// GET 9private void Button1_Click(object sender, EventArgs e) 10{ 11 // スクロール位置を取得 12 SendMessage(this.textBox1.Handle, 0x04DD, 0, ref pos); 13 //NativeMethods.SendMessage(this.richTextBox1.Handle, 0x04DD, 0, ref pos); 14 label1.Text = pos.X.ToString(); 15 label2.Text = pos.Y.ToString(); 16} 17 18// SET 19private void Button2_Click(object sender, EventArgs e) 20{ 21 // スクロール位置を復元 22 SendMessage(this.textBox1.Handle, 0x04DE, 0, ref pos); 23 //NativeMethods.SendMessage(this.richTextBox1.Handle, 0x04DE, 0, ref pos); 24 label1.Text = pos.X.ToString(); 25 label2.Text = pos.Y.ToString(); 26}
こちらについて何かお分かりの方いらっしゃいましたら、ご教授いただけましたらありがたく思います。
よろしくお願いします。m(_ _)m
追記:
代替案として「キャレットの位置を保存して、復元時にキャレットの位置までスクロールする」という実装も試してみました。
ただしこちらの場合、キャレットがある行がテキストボックスに表示されている範囲での最下行までしかスクロールダウンしてくれず、とても不格好な上に結局少し手でスクロールダウンさせる必要があり不便です。。
回答1件
あなたの回答
tips
プレビュー