PDA

View Full Version : سوال: چگونه میتوان دو ریچ تکست باکس را با یک کنترل اسکرول بار به هم متصل کرد



alexmcse
پنج شنبه 12 شهریور 1394, 22:00 عصر
چگونه میتوان دو ریچ تکست باکس را با یک کنترل اسکرول بار به هم متصل کرد به گونه ای که اسکرول بار دو ریچ تکست نمایان نشود
منظورم اینکه هر دو ریچ تکست همزمان به هم پیمایش بشوند ولی از اسکرول خودشان استفاده نکنند


:ناراحت:
تشکر

seyedVB
پنج شنبه 12 شهریور 1394, 22:29 عصر
یک راهش اینه که یک Custom Control اضافه کنید که از کلاس RichTextBox به ارث ببرد . برای اینکار کافیست از بر روی اسم پروژه خودتون کلیک راست کنید و از منوی Add گزینه new Item را انتخاب کنید و از نمودار درختی سمت چپ آیتم Windows Forms را انتخاب کنید و سپس از پنل سمت راست Custom Control را انتخاب کنید .
حالا از toolbox کنترل RichTextBox را بگیرید و رها کنید درون Container کنترل custom جدیدی که ایجاد کردید.
حالا به کلاسش بروید و اونو به صورت زیر تغییر بدید : ( دقت کنید عبارت RichTextBox را باید جلوی MyRichTextBox بنویسید.)
public partial class MyRichTextBox : RichTextBox {
public MyRichTextBox()
{
InitializeComponent();
}


protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
}


#region API Stuff
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int GetScrollPos(IntPtr hWnd, int nBar);


[DllImport("user32.dll")]
private static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);


private const int SB_HORZ = 0x0;
private const int SB_VERT = 0x1;
#endregion
public int HorizontalPosition
{
get { return GetScrollPos((IntPtr)this.Handle, SB_HORZ); }
set { SetScrollPos((IntPtr)this.Handle, SB_HORZ, value, true); }
}


public int VerticalPosition
{
get { return GetScrollPos((IntPtr)this.Handle, SB_VERT); }
set { SetScrollPos((IntPtr)this.Handle, SB_VERT, value, true); }
}


}




بعد پروژه رو Build کنید و از Toolbox برنامه خودتان کنترل جدید خودتان که RichTextBox را توسعه میدهد را به فرمتان اضافه کنید ، خوب با اینکار شما می تونید در یکجا مثلا در فرم اصلی در رویداد TextChanged یکی از richTextBox ها مثلا اولی بنویسید :

myRichTextBox2.VerticalPosition = myRichTextBox1.VerticalPosition;


www.cafebit.ir (http://www.cafebit.ir)
سورس پروژه نیز ضمیمه شده است . 134944

alexmcse
جمعه 13 شهریور 1394, 11:49 صبح
سلام
عزیز برنامه کار نمیکند لطفا تست کنید
دو کنترل پیمایش همزمان نمیشود
تشکر

seyedVB
جمعه 13 شهریور 1394, 14:48 عصر
سلام
عزیز برنامه کار نمیکند لطفا تست کنید
دو کنترل پیمایش همزمان نمیشود
تشکر

اصل کار رو توی سورس کد بیان کردم ، کافسیت با استفاده از این دو Property خودتون اسکرول رو فعال کنید . اسکرول وقتی فعال میشود که متن درون richtextbox از height آن بیشتر باشد .