首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

在google上面搜到下面的微软的地址,可是看不了,该怎么解决

2012-01-15 
在google上面搜到下面的微软的地址,可是看不了在google上面搜到下面的微软的地址,可是看不了有谁可以打开

在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さんのソースを参考に解決出来ました
ありがとうございました。
[解决办法]
日文,恶心~!
[解决办法]
倭兽的语言

热点排行