質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

Q&A

解決済

1回答

764閲覧

リッチテキストボックスのスクロールバーを左に表示したい

kjkjmk

総合スコア7

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

1グッド

0クリップ

投稿2023/12/15 12:17

実現したいこと

リッチテキストボックス配置時に、テキストが表示範囲を超えた場合スクロールバーが表示されますが、そのスクロールバーの表示位置を左にする方法はありますでしょうか。

言語:C#
環境:visualstudio、Windowsフォーム
.NET Framework 4,7,2

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

TextBoxでの話ですが、RichTextBoxでも動作しました。
c# - TextBox with vertical scrollbar on the left side - Stack Overflow

cs

1using System; 2using System.Runtime.InteropServices; 3using System.Windows.Forms; 4 5 6namespace Qklheq94bhpzvyp 7{ 8 public partial class Form1 : Form 9 { 10 public Form1() 11 { 12 InitializeComponent(); 13 14 new LeftScrollBarRichTextBox 15 { 16 Dock = DockStyle.Fill, 17 Parent = this, 18 //ScrollBars = RichTextBoxScrollBars.Vertical, 19 Text = $"aaa{new string('\n', 26)}あああ", 20 }; 21 } 22 } 23 24 // [c# - TextBox with vertical scrollbar on the left side - Stack Overflow](https://stackoverflow.com/questions/14402428/textbox-with-vertical-scrollbar-on-the-left-side) 25 public class LeftScrollBarRichTextBox : RichTextBox 26 { 27 private const int GWL_EXSTYLE = -20; 28 private const int WS_EX_LEFTSCROLLBAR = 16384; 29 [DllImport("user32")] private extern static int GetWindowLong(IntPtr hWnd, int nIndex); 30 [DllImport("user32")] private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); 31 protected override void OnHandleCreated(EventArgs e) 32 { 33 base.OnHandleCreated(e); 34 var style = GetWindowLong(Handle, GWL_EXSTYLE); 35 style |= WS_EX_LEFTSCROLLBAR; 36 SetWindowLong(Handle, GWL_EXSTYLE, style); 37 } 38 } 39}

アプリ動画


不特定多数が使うなら、あまりイレギュラーなことをするべきではありません(個人で使う分には好きにすればいいとは思いますが)


追記

既存のリッチテキストボックスのスクロールバーを左にしたり、右にしたりと変更可能にしたい

こんなんでしょうか(細かく確認していないので、なにか不具合等あるかもしれませんが)

cs

1using System; 2using System.Runtime.InteropServices; 3using System.Windows.Forms; 4 5 6namespace Qklheq94bhpzvyp 7{ 8 public partial class Form1 : Form 9 { 10 private LeftScrollBarRichTextBox leftScrollBarRichTextBox; 11 12 public Form1() 13 { 14 InitializeComponent(); 15 16 leftScrollBarRichTextBox = new LeftScrollBarRichTextBox 17 { 18 Dock = DockStyle.Fill, 19 Parent = this, 20 Text = $"aaa{new string('\n', 26)}あああ", 21 }; 22 23 new CheckBox 24 { 25 Dock = DockStyle.Top, 26 Parent = this, 27 Text = "LeftScrollBar", 28 }.CheckedChanged += CheckedChanged; 29 } 30 31 private void CheckedChanged(object sender, EventArgs e) 32 { 33 if (sender is CheckBox checkBox) 34 leftScrollBarRichTextBox.LeftScrollBar = checkBox.Checked; 35 } 36 } 37 38 // [c# - TextBox with vertical scrollbar on the left side - Stack Overflow](https://stackoverflow.com/questions/14402428/textbox-with-vertical-scrollbar-on-the-left-side) 39 public class LeftScrollBarRichTextBox : RichTextBox 40 { 41 public bool LeftScrollBar 42 { 43 get => (GetWindowLong(Handle, GWL_EXSTYLE) & WS_EX_LEFTSCROLLBAR) != 0; 44 set 45 { 46 var style = GetWindowLong(Handle, GWL_EXSTYLE); 47 if (value) style |= WS_EX_LEFTSCROLLBAR; 48 else style &= ~WS_EX_LEFTSCROLLBAR; 49 SetWindowLong(Handle, GWL_EXSTYLE, style); 50 Refresh(); 51 } 52 } 53 54 private const int GWL_EXSTYLE = -20; 55 private const int WS_EX_LEFTSCROLLBAR = 16384; 56 [DllImport("user32")] private extern static int GetWindowLong(IntPtr hWnd, int nIndex); 57 [DllImport("user32")] private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); 58 } 59}

トグル動作

投稿2023/12/15 14:03

編集2023/12/17 01:42
TN8001

総合スコア10024

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kjkjmk

2023/12/16 06:21

回答ありがとうございます! リッチテキストボックス作成時にスクロールバーを左にできるんですね。 前提を伝え漏れていて申し訳ありませんが、既存のリッチテキストボックスのスクロールバーを 左にしたり、右にしたりと変更可能にしたいのですが、そのような場合の方法はわかりますでしょうか? スクロールバーが左のリッチテキストボックスを作成するのですら、結構複雑そうなので、そのような方法はないのでしょうか。
TN8001

2023/12/16 08:22

回答に追記しました。
kjkjmk

2023/12/17 05:14

ありがとうございます! 理想通りの挙動になりました。 仕組みも理解できるように読み込んでみます。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問