Bazı sözdizimi vurgulamak için kullanıyorum richTextBox var.RichTextBox BeginUpdate() EndUpdate() Uzantı Yöntemleri Çalışmıyor
Application.Idle += new EventHandler(Application_Idle);
olay: bunun yerine Regex
s kullanarak ve Application.Idle
olay için bir olay işleyicisi kullanarak bir giriş gecikmesi tespiti üzerine güncelleştiriyorum - Bu benim özel bir sözdizimi vurgulayıcı yazmadım böylece küçük düzenleme tesistir işleyici Ben metin kutusu etkin olmadığında kez kontrol edin:
private void Application_Idle(object sender, EventArgs e)
{
// Get time since last syntax update.
double timeRtb1 = DateTime.Now.Subtract(_lastChangeRtb1).TotalMilliseconds;
// If required highlight syntax.
if (timeRtb1 > MINIMUM_UPDATE_DELAY)
{
HighlightSyntax(ref richTextBox1);
_lastChangeRtb1 = DateTime.MaxValue;
}
}
Ama nispeten küçük vurgular için RichTextBox
ağır titrer ve hiçbir richTextBox.BeginUpdate()/EndUpdate()
yöntemleri vardır. Bunun üstesinden gelmek için ben this answer to a similar dilemma by Hans Passant (Hans Passant aşağı bana izin olmamıştı!) bulundu: Ancak
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
class MyRichTextBox : RichTextBox
{
public void BeginUpdate()
{
SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)0, IntPtr.Zero);
}
public void EndUpdate()
{
SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)1, IntPtr.Zero);
}
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
private const int WM_SETREDRAW = 0x0b;
}
, bu bana bir güncelleme üzerine tek bir davranış verir; imleç ölür/donar ve garip görünen çizgilerden başka hiçbir şey göstermez (aşağıdaki resme bakın).
açıkça UI güncelleştirmek için alternatif bir iş parçacığı kullanamaz , yani ne burada yanlış yapıyorum?
Zaman ayırdığınız için teşekkür ederiz.
Bu nane! Bir çekicilik gibi çalıştı ... Bir küçük soru, Uzatma Yöntemleri ve incelikleri hakkında nasıl öğreniyorsunuz? SendMessage (this.Handle, WM_SETREDRAW, (IntPtr) 1, IntPtr.Zero); tam olarak standart C# değil !? Yoksa öyle mi? – MoonKnight
@Killercam 'SendMessage' ve Uzantıları iki farklı şeydir. 'SendMessage' bir windows API işlevi çağırıyor. Uzantılar için, bkz. [Uzantı Yöntemleri (C# Programlama Kılavuzu)] (http://msdn.microsoft.com/en-us/library/bb383977.aspx). – LarsTech
Cevabınız için teşekkür ederiz. Ben ikisinin farklı olduğunu anlıyorum. Bağlantı ve yardımınız için teşekkürler, en çok takdir edilmektedir. – MoonKnight