在google上面搜到下面的微软的地址,可是看不了
在google上面搜到下面的微软的地址,可是看不了
有谁可以打开的,把上面的代码放出来看看。
http://www.microsoft.com/japan/msdn/community/gdn/ShowPost-22353.htm
[解决办法]
スレッド: TextBox のワドラップの抑止について
hatayama はオフラインです。最後に活した刻: 2005/01/28 17:05:01 hatayama
参加日: 2004-12-23
投稿数: 6
TextBox のワドラップの抑止について
投稿日: 2004-12-23 午後 3:48
はじめまして、hatayamaといます。
VB.NETのTextBoxで3000~4000文字のい行を含む入力を行おうとしています。
入力するデタは大量にスペスを含むため、右端で折り返しはしたいがワドラップは要らない状です。
そこでプロパティを以下のように更しています。
multiline=True
WordWrap=True
ScrollBars=Both
ワドラップの抑止する方法として、
SendMessageでEM_SETWORDBREAKPROCを送り、
必ず0をす数を定する方法を本でつけ、してみたのですが、
文字を入力中に以下のメッセジを出して落ちてしまいます。
--------------------------------------------------
'System.NullReferenceException ' のハンドルされていない例外が system.windows.forms.dll で生しました。
追加情 : オブジェクト参照がオブジェクト インスタンスに定されていません。
--------------------------------------------------
エラの回避方法かのワドラップの抑止方法を教えていただけないでしょうか?
よろしくおいします。
trapemiya はオフラインです。最後に活した刻: 2006/03/20 22:40:21 trapemiya
Top 25 Poster
参加日: 2003-5-6
投稿数: 1641
Re: TextBox のワドラップの抑止について
投稿日: 2004-12-24 午前 11:54
こんにちは。
外してるかもしれませんが、PostMessageで送ってみたらどうでしょうか?
Lady.BUG はオフラインです。最後に活した刻: 2006/03/30 21:33:09 Lady.BUG
Top 25 Poster
参加日: 2004-2-13
投稿数: 1086
Re: TextBox のワドラップの抑止について
投稿日: 2004-12-24 午後 12:55
PInvoke の FAQかもしれませんが、PInvoke に渡したコルバック用の delegate の参照数が 0 になっていませんか?
参照数が 0 になっているとガベッジコレクタによって delegate が回された後に、API が callback を呼び出そうとした点で上の例外に遭遇します。
C#
private delegate int WordBreakProc(IntPtr pchText, int cchText, byte bCharset, int code);
private void TextBox1_CreateHandle(object sender, EventArgs e)
{
Control self = sender as Control;
SendMessage(self.Handle, EM.SETWORDBREAKPROCEX, 0, new WordBreakProc(MyWordBreak));
}
VB
Sub TextBox1_CreateHandle(ByVal sender As Object, ByVal e As EventArgs) Handles TextBox1.CreateHandle
Dim self As Control
self = CType(sender, Control)
SendMessage(self.Handle,EM.SETWORDBREAKPROCEX,0,AddressOf MyWordBreak)
End Sub
のようにしてるとダメです。このような合は GCHandle を利用して、
C#
private delegate int WordBreakProc(IntPtr pchText, int cchText, byte bCharset, int code);
private void TextBox1_HandleCreated(object sender, EventArgs e)
{
Control self = sender as Control;
WordBreakProc proc = new WordBreakProc(MyWordBreak);
// とりあえず Tag プロパティに保存する
self.Tag = GCHandle.Alloc(proc);
// callback を登
SendMessage(self.Handle, EM.SETWORDBREAKPROCEX, 0, proc);
}
private void TextBox1_HandleDestroyed(object sender, EventArgs e)
{
// 登していた callback の参照を消す
(self.Tag as GCHandle).Free();
}
VB
Private Sub TextBox1_HandleCreated(ByVal sender As Object, ByVal e As EventArgs) Handles TextBox1.HandleCreated
Dim proc As WordBreakProc
proc = AddressOf MyWordBreak
With CType(sender, Control)
' とりあえず Tag プロパティに保存する
.Tag = GCHandle.Alloc(proc)
' callback を登する
SendMessage(.Handle, EM.SETWORDBREAKPROCEX, 0, proc)
End With
End Sub
Sub TextBox1_HandleDestroyed(ByVal sender As Object, ByVal e As EventArgs) Handles TextBox1.HandleDestroyed
// 登していた callback の参照を消す
With CType(self.Tag, GCHandle)
.Free
End With
End Sub
のようにする必要があります。
hatayama はオフラインです。最後に活した刻: 2005/01/28 17:05:01 hatayama
参加日: 2004-12-23
投稿数: 6
Re: TextBox のワドラップの抑止について
投稿日: 2004-12-24 午後 5:52
MIYAさん、Lady.BUGさん
回答、ありがとうございます。
ご指摘の点に注意して、ソスファイルを直しました。
サンプルと同じにSendMessageの引数でAddressOFを行っているのですが、
これが原因ですね。
SendMessage( _
.Handle, EM_SETWORDBREAKPROC, _
0, _
AddressOf EditWordBreakProc)
GCHandle.Allocでハンドルを割り当てた数に AddressOf EditWordBreakProcを
代入して使うことでエラが出なくなりました。
trapemiya はオフラインです。最後に活した刻: 2006/03/20 22:40:21 trapemiya
Top 25 Poster
参加日: 2003-5-6
投稿数: 1641
Re: TextBox のワドラップの抑止について
投稿日: 2004-12-24 午後 6:11
とりあえずメッセジルプがらみを疑ったので、何か珍なこと言っちゃいましたね。m(_ _)m
しかし、Lady.BUGさんのカキコはホント参考になります。
何かすごく得した分です。 さぁ、φ(.. )メモメモ
ramces はオフラインです。最後に活した刻: 2005/09/15 11:57:39 ramces
参加日: 2005-1-6
投稿数: 6
Re: TextBox のワドラップの抑止について
投稿日: 2005-1-6 午後 8:10
hatayamaさんと同じ象がでて困っています。
Lady.BUGさんのソスがめれば解できるのでしょうがVB以外理解していないもので、
エラの原因についてはなんとなく理解できたのですが解できていません。
もし、よろしければhatayamaさん VBでのソスを示してはけないでしょうか?
なにとぞよろしくおいします。
ramces はオフラインです。最後に活した刻: 2005/09/15 11:57:39 ramces
参加日: 2005-1-6
投稿数: 6
Re: TextBox のワドラップの抑止について
投稿日: 2005-1-7 午後 1:31
Lady.BUGさんのソスを参考に解出来ました
ありがとうございました。
[解决办法]
日文,恶心~!
[解决办法]
倭兽的语言