DoboWiki
Top
> .NETプログラミング研究/51 をテンプレートにして作成
.NETプログラミング研究/51 をテンプレートにして作成
開始行:
#title(.NETプログラミング研究 第51号)
#navi(.NETプログラミング研究)
#contents
*.NETプログラミング研究 第51号 [#ebb2abbe]
**.NET質問箱 [#d8371a04]
「.NET質問箱」では、「どぼん!のプログラミング掲示板」に...
-[[どぼん!のプログラミング掲示板>https://dobon.net/vb/bb...
***コンボボックスの高さを変えるのは? [#ib2f028f]
#column(注意){{
この記事の最新版は「[[ComboBoxの高さを変える>https://dobo...
}}
''【質問】''
System.Windows.Forms.ComboBoxコントロールの高さを変えるこ...
''【回答】''
ComboBoxの高さを変えるには、ComboBoxをオーナードローする...
-[[コンボボックスの項目を自分で描画する>https://dobon.net...
以下にサンプルを示します。ここではComboBox1の項目の高さ(...
#code(vbnet){{
'フォームのLoadイベントハンドラ
Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
'オーナードローを指定
ComboBox1.DrawMode = DrawMode.OwnerDrawFixed
'項目の高さを設定
ComboBox1.ItemHeight = 20
'DrawItemイベントハンドラの追加
AddHandler ComboBox1.DrawItem, AddressOf ComboBox1_Dr...
'ComboBox1のリストに項目を追加する
ComboBox1.Items.Add("おはよう。")
ComboBox1.Items.Add("こんにちは。")
ComboBox1.Items.Add("こんばんは。")
End Sub
'DrawItemイベントハンドラ
'項目を描画する
Private Sub ComboBox1_DrawItem(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DrawItemEventArgs)
'背景を描画する
'項目が選択されている時は強調表示される
e.DrawBackground()
Dim cmb As ComboBox = CType(sender, ComboBox)
'項目に表示する文字列
Dim txt As String
If (e.Index > -1) Then
txt = cmb.Items(e.Index).ToString()
Else
txt = cmb.Text
End If
'使用するブラシ
Dim b As Brush = New SolidBrush(e.ForeColor)
'文字列を描画する
Dim ym As Single = (e.Bounds.Height - _
e.Graphics.MeasureString(txt, cmb.Font).Height) / 2
e.Graphics.DrawString(txt, cmb.Font, b, _
e.Bounds.X, e.Bounds.Y + ym)
b.Dispose()
'フォーカスを示す四角形を描画
e.DrawFocusRectangle()
End Sub
}}
#code(csharp){{
//Form1のLoadイベントハンドラ
private void Form1_Load(object sender, System.EventArgs e)
{
//オーナードローを指定
ComboBox1.DrawMode = DrawMode.OwnerDrawFixed;
//項目の高さを設定
ComboBox1.ItemHeight = 20;
//DrawItemイベントハンドラの追加
ComboBox1.DrawItem +=
new DrawItemEventHandler(ComboBox1_DrawItem);
//ComboBox1のリストに項目を追加する
ComboBox1.Items.Add("おはよう。");
ComboBox1.Items.Add("こんにちは。");
ComboBox1.Items.Add("こんばんは。");
}
//DrawItemイベントハンドラ
//項目を描画する
private void ComboBox1_DrawItem(object sender,
System.Windows.Forms.DrawItemEventArgs e)
{
//背景を描画する
//項目が選択されている時は強調表示される
e.DrawBackground();
ComboBox cmb = (ComboBox) sender;
//項目に表示する文字列
string txt = e.Index > -1 ?
cmb.Items[e.Index].ToString() : cmb.Text;
//使用するブラシ
Brush b = new SolidBrush(e.ForeColor);
//文字列を描画する
float ym =
(e.Bounds.Height - e.Graphics.MeasureString(
txt, cmb.Font).Height) / 2;
e.Graphics.DrawString(
txt, cmb.Font, b, e.Bounds.X, e.Bounds.Y + ym);
b.Dispose();
//フォーカスを示す四角形を描画
e.DrawFocusRectangle();
}
}}
○この記事の基になった掲示板のスレッド
-[[コンボボックスの高さの変え方 | 投稿者(敬称略) hiro, ...
***埋め込まれたHTMLを表示するには? [#icb3bb80]
#column(注意){{
この記事の最新版は「[[埋め込まれたHTMLを表示する>https://...
}}
''【質問】''
アセンブリファイルにリソースとしてHTMLファイルを埋め込み...
''【回答】''
埋め込まれたHTMLファイルを一時ファイルに書き込み、それを...
Internet Explore 4以降(?)では、res://プロトコルがサポ...
.NETでWin32リソースを埋め込む方法はちょっと厄介です。Visu...
1.リソースを埋め込むアセンブリファイルをメニューの「フ...
2.アセンブリファイル名のノード(RCノード)を右クリック...
3.「リソースの追加」ダイアログの「インポート」ボタンを...
4.保存して、完了です。
このような方法では、アセンブリをビルドするたびにリソース...
/win32resオプションでは、Win32リソースファイルを指定する...
"readme.html"を"test.html"というIDで埋め込む場合、RCファ...
‥‥▽ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
readme.html HTML "test.html"
‥‥△ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
コマンドラインで
rc.exe win32.rc
を実行すると、"win32.RES"というファイルができます。これが...
あとはリソースを埋め込むアセンブリをコンパイルする時に、/...
#code(vbnet){{
vbc.exe /out:win32res.dll /target:library /win32resource:...
}}
#code(csharp){{
csc.exe /out:win32res.dll /target:library /win32res:win32...
}}
このようにして埋め込まれたファイルは、Internet Exploreか...
res://(アセンブリファイルのフルパス)/(リソースのID)
としてアクセスできます。つまり上の例では、
res://(アセンブリファイルのフルパス)/test.html
で埋め込まれたHTMLが表示されます。
最後に、Microsoft Web Browserコントロールで自分自身のアセ...
#code(vbnet){{
Dim url As String = "res://" + _
System.Reflection.Assembly.GetExecutingAssembly().Loc...
"/test.html"
'WebBrowserに表示する
AxWebBrowser1.Navigate(url)
}}
#code(csharp){{
string url = "res://" +
System.Reflection.Assembly.GetExecutingAssembly().Loc...
"/test.html";
//WebBrowserに表示する
object refmissing = System.Reflection.Missing.Value;
AxWebBrowser1.Navigate(url,
ref refmissing, ref refmissing,
ref refmissing, ref refmissing);
}}
参考:
-[[The Code Project - Embed Win32 resources in C# program...
-[[The Code Project - Using MSHTML Advanced Hosting Inter...
○この記事の基になった掲示板のスレッド
-[[アプリに埋め込まれたhtmlファイルを表示したい | 投...
***タブのテキストを縦書きにするには? [#u5c8d3ae]
#column(注意){{
この記事の最新版は「[[TabControlのタブのテキストを縦書き...
}}
''【質問】''
TabControlコントロールのAlignmentプロパティをRightにして...
''【回答】''
まず、タブをオーナードローする方法があります。タブコント...
-[[DOBON.NET .NET Tips - TabControlのタブを自分で描画する...
をご覧ください。
以下にオーナードローによりタブのTextを縦書きにする例を示...
#code(vbnet){{
'フォームのLoadイベントハンドラ
Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
TabControl1.Alignment = TabAlignment.Right
'TabControlをオーナードローする
TabControl1.DrawMode = TabDrawMode.OwnerDrawFixed
'DrawItemイベントハンドラを追加
AddHandler TabControl1.DrawItem, AddressOf TabControl...
End Sub
'TabControl1のDrawItemイベントハンドラ
Private Sub TabControl1_DrawItem(ByVal sender As Object, _
ByVal e As DrawItemEventArgs)
'対象のTabControlを取得
Dim tab As TabControl = CType(sender, TabControl)
Dim page As TabPage = tab.TabPages(e.Index)
'タブページのテキストを取得
Dim txt As String = page.Text
'StringFormatを作成
Dim sf As New StringFormat
'縦書きにする
sf.FormatFlags = StringFormatFlags.DirectionVertical
Dim foreBrush, backBrush As Brush
'背景の描画
backBrush = New SolidBrush(page.BackColor)
e.Graphics.FillRectangle(backBrush, e.Bounds)
'Textの描画
foreBrush = New SolidBrush(page.ForeColor)
e.Graphics.DrawString(txt, page.Font, foreBrush, _
RectangleF.op_Implicit(e.Bounds), sf)
foreBrush.Dispose()
backBrush.Dispose()
End Sub
}}
#code(csharp){{
//Form1のLoadイベントハンドラ
private void Form1_Load(object sender, System.EventArgs e)
{
TabControl1.Alignment = TabAlignment.Right;
//TabControlをオーナードローする
TabControl1.DrawMode = TabDrawMode.OwnerDrawFixed;
//DrawItemイベントハンドラを追加
TabControl1.DrawItem += new DrawItemEventHandler(TabC...
}
//TabControl1のDrawItemイベントハンドラ
private void TabControl1_DrawItem(object sender, DrawItem...
{
//対象のTabControlを取得
TabControl tab = (TabControl) sender;
TabPage page = tab.TabPages[e.Index];
//タブページのテキストを取得
string txt = page.Text;
//StringFormatを作成
StringFormat sf = new StringFormat();
//縦書きにする
sf.FormatFlags = StringFormatFlags.DirectionVertical;
Brush foreBrush, backBrush;
//背景の描画
backBrush = new SolidBrush(page.BackColor);
e.Graphics.FillRectangle(backBrush, e.Bounds);
//Textの描画
foreBrush = new SolidBrush(page.ForeColor);
e.Graphics.DrawString(txt, page.Font, foreBrush, e.Bo...
foreBrush.Dispose();
backBrush.Dispose();
}
}}
また、掲示板ではピラルクさんが縦書きフォントを使用する方...
#code(vbnet){{
TabControl1.Alignment = TabAlignment.Right
'縦書きのフォントにする
TabControl1.Font = New Font( _
TabControl1.Font.FontFamily, _
TabControl1.Font.Size, _
TabControl1.Font.Style, _
TabControl1.Font.Unit, _
TabControl1.Font.GdiCharSet, _
True)
}}
#code(csharp){{
TabControl1.Alignment = TabAlignment.Right;
//縦書きのフォントにする
TabControl1.Font = new Font(
TabControl1.Font.FontFamily,
TabControl1.Font.Size,
TabControl1.Font.Style,
TabControl1.Font.Unit,
TabControl1.Font.GdiCharSet,
true);
}}
○この記事の基になった掲示板のスレッド
-[[コントロールのTEXTを縦書きに | 投稿者(敬称略) うま, り...
***テキストボックスの現在のカレット位置(行と列)を取得す...
#column(注意){{
この記事の最新版は「[[TextBox(またはRichTextBox)の現在...
}}
''【質問】''
テキストボックス(またはリッチテキストボックス)内で現在...
''【回答】''
行を理論的に数える場合(WordWrapがTrueで、右側で折り返さ...
#code(vbnet){{
'文字列
Dim str As String = TextBox1.Text
'カレットの位置を取得
Dim selectPos As Integer = TextBox1.SelectionStart
'カレットの位置までの行を数える
Dim row As Integer = 1
Dim startPos As Integer = 0
Dim endPos As Integer
While (True)
endPos = str.IndexOf(vbLf, startPos)
If (endPos < 0 Or endPos > selectPos) Then
Exit While
End If
startPos = endPos + 1
row += 1
End While
'列の計算
Dim col As Integer = selectPos - startPos + 1
'結果を表示
Console.WriteLine("行:{0} 列:{1}", row, col)
}}
#code(csharp){{
//文字列
string str = TextBox1.Text;
//カレットの位置を取得
int selectPos = TextBox1.SelectionStart;
//カレットの位置までの行を数える
int row = 1, startPos = 0;
for (int endPos = 0;
(endPos = str.IndexOf('\n', startPos)) < selectPos &&...
row++)
{
startPos = endPos + 1;
}
//列の計算
int col = selectPos - startPos + 1;
//結果を表示
Console.WriteLine("行:{0} 列:{1}", row, col);
}}
行を物理的に数える場合(WordWrapがTrueで、右側で折り返さ...
次の例では、Button1をクリックすることにより、物理的な現在...
#code(vbnet){{
<System.Runtime.InteropServices.DllImport("User32.Dll")> _
Private Shared Function SendMessage( _
ByVal hWnd As IntPtr, _
ByVal Msg As Integer, _
ByVal wParam As Integer, _
ByVal lParam As Integer) As Integer
End Function
Private Const EM_LINEINDEX As Integer = &HBB
Private Const EM_LINEFROMCHAR As Integer = &HC9
'Button1のクリックイベントハンドラ
Private Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Button1.Click
'現在の行を取得する
Dim row As Integer = SendMessage( _
TextBox1.Handle, EM_LINEFROMCHAR, -1, 0) + 1
'現在の列を取得する
Dim lineIndex As Integer = SendMessage( _
TextBox1.Handle, EM_LINEINDEX, -1, 0)
Dim col As Integer = TextBox1.SelectionStart - lineIn...
Console.WriteLine("行:{0} 列:{1}", row, col)
End Sub
}}
#code(csharp){{
[System.Runtime.InteropServices.DllImport("User32.Dll")]
private static extern int SendMessage(
IntPtr hWnd,int Msg,int wParam,int lParam);
private const int EM_LINEINDEX = 0xBB;
private const int EM_LINEFROMCHAR=0xC9;
//Button1のクリックイベントハンドラ
private void Button1_Click(object sender, System.EventArg...
{
//現在の行を取得する
int row = SendMessage(
TextBox1.Handle, EM_LINEFROMCHAR, -1, 0) + 1;
//現在の列を取得する
int lineIndex = SendMessage(
TextBox1.Handle, EM_LINEINDEX, -1, 0);
int col = TextBox1.SelectionStart - lineIndex + 1;
Console.WriteLine("行:{0} 列:{1}", row, col);
}
}}
なお、リッチテキストボックスの物理的な行は、GetLineFromCh...
○この記事の基になった掲示板のスレッド
-[[リッチテキスト内のカーソル位置の取得 | 投稿者(敬称略) ...
**コメント [#da25a929]
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]],2005-02-09 (水) 06:00:00,DOB...
終了行:
#title(.NETプログラミング研究 第51号)
#navi(.NETプログラミング研究)
#contents
*.NETプログラミング研究 第51号 [#ebb2abbe]
**.NET質問箱 [#d8371a04]
「.NET質問箱」では、「どぼん!のプログラミング掲示板」に...
-[[どぼん!のプログラミング掲示板>https://dobon.net/vb/bb...
***コンボボックスの高さを変えるのは? [#ib2f028f]
#column(注意){{
この記事の最新版は「[[ComboBoxの高さを変える>https://dobo...
}}
''【質問】''
System.Windows.Forms.ComboBoxコントロールの高さを変えるこ...
''【回答】''
ComboBoxの高さを変えるには、ComboBoxをオーナードローする...
-[[コンボボックスの項目を自分で描画する>https://dobon.net...
以下にサンプルを示します。ここではComboBox1の項目の高さ(...
#code(vbnet){{
'フォームのLoadイベントハンドラ
Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
'オーナードローを指定
ComboBox1.DrawMode = DrawMode.OwnerDrawFixed
'項目の高さを設定
ComboBox1.ItemHeight = 20
'DrawItemイベントハンドラの追加
AddHandler ComboBox1.DrawItem, AddressOf ComboBox1_Dr...
'ComboBox1のリストに項目を追加する
ComboBox1.Items.Add("おはよう。")
ComboBox1.Items.Add("こんにちは。")
ComboBox1.Items.Add("こんばんは。")
End Sub
'DrawItemイベントハンドラ
'項目を描画する
Private Sub ComboBox1_DrawItem(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DrawItemEventArgs)
'背景を描画する
'項目が選択されている時は強調表示される
e.DrawBackground()
Dim cmb As ComboBox = CType(sender, ComboBox)
'項目に表示する文字列
Dim txt As String
If (e.Index > -1) Then
txt = cmb.Items(e.Index).ToString()
Else
txt = cmb.Text
End If
'使用するブラシ
Dim b As Brush = New SolidBrush(e.ForeColor)
'文字列を描画する
Dim ym As Single = (e.Bounds.Height - _
e.Graphics.MeasureString(txt, cmb.Font).Height) / 2
e.Graphics.DrawString(txt, cmb.Font, b, _
e.Bounds.X, e.Bounds.Y + ym)
b.Dispose()
'フォーカスを示す四角形を描画
e.DrawFocusRectangle()
End Sub
}}
#code(csharp){{
//Form1のLoadイベントハンドラ
private void Form1_Load(object sender, System.EventArgs e)
{
//オーナードローを指定
ComboBox1.DrawMode = DrawMode.OwnerDrawFixed;
//項目の高さを設定
ComboBox1.ItemHeight = 20;
//DrawItemイベントハンドラの追加
ComboBox1.DrawItem +=
new DrawItemEventHandler(ComboBox1_DrawItem);
//ComboBox1のリストに項目を追加する
ComboBox1.Items.Add("おはよう。");
ComboBox1.Items.Add("こんにちは。");
ComboBox1.Items.Add("こんばんは。");
}
//DrawItemイベントハンドラ
//項目を描画する
private void ComboBox1_DrawItem(object sender,
System.Windows.Forms.DrawItemEventArgs e)
{
//背景を描画する
//項目が選択されている時は強調表示される
e.DrawBackground();
ComboBox cmb = (ComboBox) sender;
//項目に表示する文字列
string txt = e.Index > -1 ?
cmb.Items[e.Index].ToString() : cmb.Text;
//使用するブラシ
Brush b = new SolidBrush(e.ForeColor);
//文字列を描画する
float ym =
(e.Bounds.Height - e.Graphics.MeasureString(
txt, cmb.Font).Height) / 2;
e.Graphics.DrawString(
txt, cmb.Font, b, e.Bounds.X, e.Bounds.Y + ym);
b.Dispose();
//フォーカスを示す四角形を描画
e.DrawFocusRectangle();
}
}}
○この記事の基になった掲示板のスレッド
-[[コンボボックスの高さの変え方 | 投稿者(敬称略) hiro, ...
***埋め込まれたHTMLを表示するには? [#icb3bb80]
#column(注意){{
この記事の最新版は「[[埋め込まれたHTMLを表示する>https://...
}}
''【質問】''
アセンブリファイルにリソースとしてHTMLファイルを埋め込み...
''【回答】''
埋め込まれたHTMLファイルを一時ファイルに書き込み、それを...
Internet Explore 4以降(?)では、res://プロトコルがサポ...
.NETでWin32リソースを埋め込む方法はちょっと厄介です。Visu...
1.リソースを埋め込むアセンブリファイルをメニューの「フ...
2.アセンブリファイル名のノード(RCノード)を右クリック...
3.「リソースの追加」ダイアログの「インポート」ボタンを...
4.保存して、完了です。
このような方法では、アセンブリをビルドするたびにリソース...
/win32resオプションでは、Win32リソースファイルを指定する...
"readme.html"を"test.html"というIDで埋め込む場合、RCファ...
‥‥▽ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
readme.html HTML "test.html"
‥‥△ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
コマンドラインで
rc.exe win32.rc
を実行すると、"win32.RES"というファイルができます。これが...
あとはリソースを埋め込むアセンブリをコンパイルする時に、/...
#code(vbnet){{
vbc.exe /out:win32res.dll /target:library /win32resource:...
}}
#code(csharp){{
csc.exe /out:win32res.dll /target:library /win32res:win32...
}}
このようにして埋め込まれたファイルは、Internet Exploreか...
res://(アセンブリファイルのフルパス)/(リソースのID)
としてアクセスできます。つまり上の例では、
res://(アセンブリファイルのフルパス)/test.html
で埋め込まれたHTMLが表示されます。
最後に、Microsoft Web Browserコントロールで自分自身のアセ...
#code(vbnet){{
Dim url As String = "res://" + _
System.Reflection.Assembly.GetExecutingAssembly().Loc...
"/test.html"
'WebBrowserに表示する
AxWebBrowser1.Navigate(url)
}}
#code(csharp){{
string url = "res://" +
System.Reflection.Assembly.GetExecutingAssembly().Loc...
"/test.html";
//WebBrowserに表示する
object refmissing = System.Reflection.Missing.Value;
AxWebBrowser1.Navigate(url,
ref refmissing, ref refmissing,
ref refmissing, ref refmissing);
}}
参考:
-[[The Code Project - Embed Win32 resources in C# program...
-[[The Code Project - Using MSHTML Advanced Hosting Inter...
○この記事の基になった掲示板のスレッド
-[[アプリに埋め込まれたhtmlファイルを表示したい | 投...
***タブのテキストを縦書きにするには? [#u5c8d3ae]
#column(注意){{
この記事の最新版は「[[TabControlのタブのテキストを縦書き...
}}
''【質問】''
TabControlコントロールのAlignmentプロパティをRightにして...
''【回答】''
まず、タブをオーナードローする方法があります。タブコント...
-[[DOBON.NET .NET Tips - TabControlのタブを自分で描画する...
をご覧ください。
以下にオーナードローによりタブのTextを縦書きにする例を示...
#code(vbnet){{
'フォームのLoadイベントハンドラ
Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
TabControl1.Alignment = TabAlignment.Right
'TabControlをオーナードローする
TabControl1.DrawMode = TabDrawMode.OwnerDrawFixed
'DrawItemイベントハンドラを追加
AddHandler TabControl1.DrawItem, AddressOf TabControl...
End Sub
'TabControl1のDrawItemイベントハンドラ
Private Sub TabControl1_DrawItem(ByVal sender As Object, _
ByVal e As DrawItemEventArgs)
'対象のTabControlを取得
Dim tab As TabControl = CType(sender, TabControl)
Dim page As TabPage = tab.TabPages(e.Index)
'タブページのテキストを取得
Dim txt As String = page.Text
'StringFormatを作成
Dim sf As New StringFormat
'縦書きにする
sf.FormatFlags = StringFormatFlags.DirectionVertical
Dim foreBrush, backBrush As Brush
'背景の描画
backBrush = New SolidBrush(page.BackColor)
e.Graphics.FillRectangle(backBrush, e.Bounds)
'Textの描画
foreBrush = New SolidBrush(page.ForeColor)
e.Graphics.DrawString(txt, page.Font, foreBrush, _
RectangleF.op_Implicit(e.Bounds), sf)
foreBrush.Dispose()
backBrush.Dispose()
End Sub
}}
#code(csharp){{
//Form1のLoadイベントハンドラ
private void Form1_Load(object sender, System.EventArgs e)
{
TabControl1.Alignment = TabAlignment.Right;
//TabControlをオーナードローする
TabControl1.DrawMode = TabDrawMode.OwnerDrawFixed;
//DrawItemイベントハンドラを追加
TabControl1.DrawItem += new DrawItemEventHandler(TabC...
}
//TabControl1のDrawItemイベントハンドラ
private void TabControl1_DrawItem(object sender, DrawItem...
{
//対象のTabControlを取得
TabControl tab = (TabControl) sender;
TabPage page = tab.TabPages[e.Index];
//タブページのテキストを取得
string txt = page.Text;
//StringFormatを作成
StringFormat sf = new StringFormat();
//縦書きにする
sf.FormatFlags = StringFormatFlags.DirectionVertical;
Brush foreBrush, backBrush;
//背景の描画
backBrush = new SolidBrush(page.BackColor);
e.Graphics.FillRectangle(backBrush, e.Bounds);
//Textの描画
foreBrush = new SolidBrush(page.ForeColor);
e.Graphics.DrawString(txt, page.Font, foreBrush, e.Bo...
foreBrush.Dispose();
backBrush.Dispose();
}
}}
また、掲示板ではピラルクさんが縦書きフォントを使用する方...
#code(vbnet){{
TabControl1.Alignment = TabAlignment.Right
'縦書きのフォントにする
TabControl1.Font = New Font( _
TabControl1.Font.FontFamily, _
TabControl1.Font.Size, _
TabControl1.Font.Style, _
TabControl1.Font.Unit, _
TabControl1.Font.GdiCharSet, _
True)
}}
#code(csharp){{
TabControl1.Alignment = TabAlignment.Right;
//縦書きのフォントにする
TabControl1.Font = new Font(
TabControl1.Font.FontFamily,
TabControl1.Font.Size,
TabControl1.Font.Style,
TabControl1.Font.Unit,
TabControl1.Font.GdiCharSet,
true);
}}
○この記事の基になった掲示板のスレッド
-[[コントロールのTEXTを縦書きに | 投稿者(敬称略) うま, り...
***テキストボックスの現在のカレット位置(行と列)を取得す...
#column(注意){{
この記事の最新版は「[[TextBox(またはRichTextBox)の現在...
}}
''【質問】''
テキストボックス(またはリッチテキストボックス)内で現在...
''【回答】''
行を理論的に数える場合(WordWrapがTrueで、右側で折り返さ...
#code(vbnet){{
'文字列
Dim str As String = TextBox1.Text
'カレットの位置を取得
Dim selectPos As Integer = TextBox1.SelectionStart
'カレットの位置までの行を数える
Dim row As Integer = 1
Dim startPos As Integer = 0
Dim endPos As Integer
While (True)
endPos = str.IndexOf(vbLf, startPos)
If (endPos < 0 Or endPos > selectPos) Then
Exit While
End If
startPos = endPos + 1
row += 1
End While
'列の計算
Dim col As Integer = selectPos - startPos + 1
'結果を表示
Console.WriteLine("行:{0} 列:{1}", row, col)
}}
#code(csharp){{
//文字列
string str = TextBox1.Text;
//カレットの位置を取得
int selectPos = TextBox1.SelectionStart;
//カレットの位置までの行を数える
int row = 1, startPos = 0;
for (int endPos = 0;
(endPos = str.IndexOf('\n', startPos)) < selectPos &&...
row++)
{
startPos = endPos + 1;
}
//列の計算
int col = selectPos - startPos + 1;
//結果を表示
Console.WriteLine("行:{0} 列:{1}", row, col);
}}
行を物理的に数える場合(WordWrapがTrueで、右側で折り返さ...
次の例では、Button1をクリックすることにより、物理的な現在...
#code(vbnet){{
<System.Runtime.InteropServices.DllImport("User32.Dll")> _
Private Shared Function SendMessage( _
ByVal hWnd As IntPtr, _
ByVal Msg As Integer, _
ByVal wParam As Integer, _
ByVal lParam As Integer) As Integer
End Function
Private Const EM_LINEINDEX As Integer = &HBB
Private Const EM_LINEFROMCHAR As Integer = &HC9
'Button1のクリックイベントハンドラ
Private Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Button1.Click
'現在の行を取得する
Dim row As Integer = SendMessage( _
TextBox1.Handle, EM_LINEFROMCHAR, -1, 0) + 1
'現在の列を取得する
Dim lineIndex As Integer = SendMessage( _
TextBox1.Handle, EM_LINEINDEX, -1, 0)
Dim col As Integer = TextBox1.SelectionStart - lineIn...
Console.WriteLine("行:{0} 列:{1}", row, col)
End Sub
}}
#code(csharp){{
[System.Runtime.InteropServices.DllImport("User32.Dll")]
private static extern int SendMessage(
IntPtr hWnd,int Msg,int wParam,int lParam);
private const int EM_LINEINDEX = 0xBB;
private const int EM_LINEFROMCHAR=0xC9;
//Button1のクリックイベントハンドラ
private void Button1_Click(object sender, System.EventArg...
{
//現在の行を取得する
int row = SendMessage(
TextBox1.Handle, EM_LINEFROMCHAR, -1, 0) + 1;
//現在の列を取得する
int lineIndex = SendMessage(
TextBox1.Handle, EM_LINEINDEX, -1, 0);
int col = TextBox1.SelectionStart - lineIndex + 1;
Console.WriteLine("行:{0} 列:{1}", row, col);
}
}}
なお、リッチテキストボックスの物理的な行は、GetLineFromCh...
○この記事の基になった掲示板のスレッド
-[[リッチテキスト内のカーソル位置の取得 | 投稿者(敬称略) ...
**コメント [#da25a929]
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]],2005-02-09 (水) 06:00:00,DOB...
ページ名:
▲
▼
[
トップ
] [
新規
|
子ページ作成
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]