- 爱易网页
 
                        - 
                            C#教程
 
                        - 在google上面搜到下面的微软的地址,可是看不了,该怎么解决 
 
                         
                    
                    
                    日期:2014-05-19  浏览次数:20995 次 
                    
                        
                         在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