کار با RichTextBox ها در سی شارپ

m.h.124

Member
با سلام
این تاپیک و زدم که هم یه آموزش در این زمینه به همراه کدش بزارم و هم یه سوال خیلی مهمم را بپرسم.
http://www.w3-farsi.com/ویرایشگر-متن/
من آموزش بالا (شامل تغییر فونت، تغییر سایز متن، بولد، ایتالیک و ... ) را طبق آموزش برای یک rtb اعمال کردم ولی نمیدونم چطور برای چند rtb که در داخل یک فرم هستند، اعمال کنم.
از هر کسی که جواب را می دونه، تقاضای کمک دارم.
ممنون.

 

the_king

مدیرکل انجمن
با سلام
این تاپیک و زدم که هم یه آموزش در این زمینه به همراه کدش بزارم و هم یه سوال خیلی مهمم را بپرسم.
http://www.w3-farsi.com/ویرایشگر-متن/
من آموزش بالا (شامل تغییر فونت، تغییر سایز متن، بولد، ایتالیک و ... ) را طبق آموزش برای یک rtb اعمال کردم ولی نمیدونم چطور برای چند rtb که در داخل یک فرم هستند، اعمال کنم.
از هر کسی که جواب را می دونه، تقاضای کمک دارم.
ممنون.


خودتون رو بذارید جای یک کاربر، روی یک فرم یک دکمه Bold هست و چند تا RichTextBox، مرسوم نیست اما به هر حال باید یک روال مشخص و قاعده مندی در نظر بگیرید که اگر کاربر روی
دکمه Bold کلیک کرد روی کدوم RichTextBox عمل کنه. این رو شما باید تعیین کنید و توی یک متغیر فرضا x قرار بدید. x از نوع RichTextBox ئه،
حالا همون کدی که در مورد editorRichTextBox نوشته شده بجای editorRichTextBox اون متغیر x رو بکار می برید.
 

m.h.124

Member
ممنون از پاسختان.
خودتون رو بذارید جای یک کاربر، روی یک فرم یک دکمه Bold هست و چند تا RichTextBox، مرسوم نیست
درسته، من هم در ابتدا نطرم همین بود. ولی بعد با توجه به نوع پروژه ام به این نتیجه رسیدم که لازم هست.
اما به هر حال باید یک روال مشخص و قاعده مندی در نظر بگیرید که اگر کاربر روی
دکمه Bold کلیک کرد روی کدوم RichTextBox عمل کنه. این رو شما باید تعیین کنید و توی یک متغیر فرضا x قرار بدید. x از نوع RichTextBox ئه،
حالا همون کدی که در مورد editorRichTextBox نوشته شده بجای editorRichTextBox اون متغیر x رو بکار می برید.
من می خواستم روی rtb ای که روش فوکوس شده اجرا بشه.طبق آموزش شما در تاپیک قبلیم از فوکوسد استفاده کردم و نشد.احتمالا یه جایی را دارم اشتباه می رم .
 
آخرین ویرایش:

the_king

مدیرکل انجمن
ممنون از پاسختان.

درسته، من هم در ابتدا نطرم همین بود. ولی بعد با توجه به نوع پروژه ام به این نتیجه رسیدم که لازم هست.

من می خواستم روی rtb ای که روش فوکوس شده اجرا بشه.طبق آموزش شما در تاپیک قبلیم از فوکوسد استفاده کردم و نشد.احتمالا یه جایی را دارم اشتباه می رم .

پس روی فرم تان هیچ کنترلی بجز اون چند تا RichTextBox نباید Focus پذیر باشه، مثلا نباید Button داشته باشید، وگرنه ممکنه روی دکمه Bold کلیک بشه در حالی که هیچکدوم از RichTextBox ها Focus ندارند.

کد:
            RichTextBox x = ActiveControl as RichTextBox;
            if (x == null)
            {
                return;
            }
            try
            {
                x.SelectionFont = new Font(x.SelectionFont, x.SelectionFont.Style ^ FontStyle.Bold);
            }
            catch
            {
                x.SelectionFont = new Font(fontsToolStripComboBox.SelectedText, Single.Parse(sizeToolStripComboBox.Text), FontStyle.Bold);
            }
 

m.h.124

Member
سلام
ببخشید ی سوال داشتم(البته خیلی وقته که این سوال رو دارم).قسمت تغییر سایز فونت و تغییر فونت در پروژه من کار نمیکنه.شما می دونید علتش چیه؟؟فقط با فونت و سایزی که قبل از اجرای پروژه به فرم می دم تایپ می کنه.
 

the_king

مدیرکل انجمن
سلام
ببخشید ی سوال داشتم(البته خیلی وقته که این سوال رو دارم).قسمت تغییر سایز فونت و تغییر فونت در پروژه من کار نمیکنه.شما می دونید علتش چیه؟؟فقط با فونت و سایزی که قبل از اجرای پروژه به فرم می دم تایپ می کنه.

ببینید دارید فونت چه چیزی رو عوض می کنید، RichTextBox چند قسمت داره که فونت عوض می کنند، عملکرد شون فرق داره، فرضا بستگی به این داره که چه ناحیه از متن انتخاب شده باشه.
مثلا SelectionFont فونت قسمتی رو عوض می کنه که انتخاب کرده اید، در حالت عادی که هیچ بخشی از متن داخلش انتخاب نشده چیزی رو عوض نمی کنه چون SelectionLength صفر ئه.
 

m.h.124

Member
سلام
ممنون
من مشخصه selection font را پیدا نکردم.نمی دونم تونستم مفهوم سوالم رو خوب برسونم یا نه.من داخل پروژم از ابزار زیر استفاده میکنم.
attachment.php

ولی اصلا این ابزار کار نمیکنه.یعنی نمیتونم با این ابزار فونت و سایز نوشته را موقع اجرا تغییر بدم و فقط می تونم با فونت و سایزی که قبل از اجرای پروژه به rtb میدم، تایپ کنم.
 

پیوست ها

  • ریچ.png
    ریچ.png
    1.1 کیلوبایت · بازدیدها: 6
آخرین ویرایش:

the_king

مدیرکل انجمن
سلام
ممنون
من مشخصه selection font را پیدا نکردم.نمی دونم تونستم مفهوم سوالم رو خوب برسونم یا نه.من داخل پروژم از ابزار زیر استفاده میکنم.
attachment.php

ولی اصلا این ابزار کار نمیکنه.یعنی نمیتونم با این ابزار فونت و سایز نوشته را موقع اجرا تغییر بدم و فقط می تونم با فونت و سایزی که قبل از اجرای پروژه به rtb میدم، تایپ کنم.

دید تون رو عوض کنید، سوال تون از دید کاربر برنامه است که کد برنامه رو نمی بینه و فقط داره اجراش می کنه، در حالی که شما باید از دید برنامه نویس مشکل برنامه تون رو پیدا کنید، چون کد رو شما می نویسید.
اونی که دارید استفاده می کنید برای کاربر برنامه شما ابزار تغییر فونت ئه، اما برای شما که دارید برنامه می نویسید صرفا یک ComboBox ئه، ComboBox هیچ کاری جز چیزی که کد اش رو می نویسید انجام نمیده،
هر وقت می بینید کاری درست انجام نمیشه باید ببینید برای انجام کار چه کدی نوشته اید.
اگه کد رو از همونجایی برداشته اید که قبلا لینک داده اید، کد اش چیزی شبیه به این ئه :
کد:
private void fontsToolStripComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    editorRichTextBox.Focus();

    try
    {
        editorRichTextBox.[B][COLOR="#0000FF"][SIZE=3]SelectionFont[/SIZE][/COLOR][/B] = new Font(
            fontsToolStripComboBox.SelectedItem.ToString(),
            editorRichTextBox.[B][COLOR="#0000FF"][SIZE=3]SelectionFont[/SIZE][/COLOR][/B].Size, 
            editorRichTextBox.[B][COLOR="#0000FF"][SIZE=3]SelectionFont[/SIZE][/COLOR][/B].Style);
    }
    catch
    {
        editorRichTextBox.[B][COLOR="#0000FF"][SIZE=3]SelectionFont[/SIZE][/COLOR][/B] = new Font(fontsToolStripComboBox.Text,
            Single.Parse(sizeToolStripComboBox.Text), FontStyle.Regular);
    }
}

SelectionFont فونت نواحی انتخاب شده در متن رو مشخص می کنه، چیزی در متن انتخاب کرده اید که عوض بشه؟
 

m.h.124

Member
بله من متن را انتخاب می کنم فقط چون چند rtb در فرم دارم کد بالا را به کد
کد:
RichTextBox x = ActiveControl as RichTextBox;
            if (x == null)
            {
                return;
            }
            try
            {
                x.SelectionFont = new Font(
                    fontsToolStripComboBox.SelectedItem.ToString(),
                    x.SelectionFont.Size,
                    x.SelectionFont.Style);
            }
            catch
            {

                x.SelectionFont = new Font(fontsToolStripComboBox.Text,
                    Single.Parse(sizeToolStripComboBox.Text), FontStyle.Regular);
            }
تغییر دادم.ولی وقتی متن را انتخاب میکنم، دقیقا موقعی که برای تغییر فونت روی cmb کلیک می کنم، از حالت انتخاب بیرون میاد!
 

the_king

مدیرکل انجمن
بله من متن را انتخاب می کنم فقط چون چند rtb در فرم دارم کد بالا را به کد
کد:
RichTextBox x = ActiveControl as RichTextBox;
            if (x == null)
            {
                return;
            }
            try
            {
                x.SelectionFont = new Font(
                    fontsToolStripComboBox.SelectedItem.ToString(),
                    x.SelectionFont.Size,
                    x.SelectionFont.Style);
            }
            catch
            {

                x.SelectionFont = new Font(fontsToolStripComboBox.Text,
                    Single.Parse(sizeToolStripComboBox.Text), FontStyle.Regular);
            }
تغییر دادم.ولی وقتی متن را انتخاب میکنم، دقیقا موقعی که برای تغییر فونت روی cmb کلیک می کنم، از حالت انتخاب بیرون میاد!

یادتون هست که اگر مبنای انتخاب Focus باشه در مورد نحوه انتخاب RichTextBox فعال یک محدودیت داشتید :
پس روی فرم تان هیچ کنترلی بجز اون چند تا RichTextBox نباید Focus پذیر باشه، مثلا نباید Button داشته باشید، وگرنه ممکنه روی دکمه Bold کلیک بشه در حالی که هیچکدوم از RichTextBox ها Focus ندارند.

ComboBox یکی از کنترل هایی است که Focus پذیره، روی SelectionFont تاثیری نداره ولی ActiveControl رو تغییر میده. شما اگر مشخصه HideSelection اون RichTextBox ها رو False کنید، ناحیه انتخاب شده دیگه ناپدید نمیشه،
اما مشکل انتخاب RichTextBox همچنان پا بر جا است، وقتی روی fontsToolStripComboBox کلیک کردید دیگه ActiveControl همون fontsToolStripComboBox شده، هیچکدوم از RichTextBox هاتون Focus ندارند، متن انتخاب شده می توانند
داشته باشند اما Focus متعلق به هیچکدوم شون نیست. اگر می خواهید همچنان از fontsToolStripComboBox استفاده کنید باید برای انتخاب کردن RichTextBox یک قاعده دیگه در نظر بگیرید، فرضا آخرین RichTextBox ای که انتخاب شده بوده :

کد:
        private RichTextBox _activeRtb = null;

        private void richTextBox1_Enter(object sender, EventArgs e)
        {
            _activeRtb = sender as RichTextBox;
        }

        private void richTextBox2_Enter(object sender, EventArgs e)
        {
            _activeRtb = sender as RichTextBox;
        }

اینطوری دیگه با x یا ActiveControl کاری ندارید، به جایش از activeRtb_ استفاده می کنید.
 

m.h.124

Member
ممنونم.
درست شد فقط قسمت کش(catch)خطا داد که با حذف کد داخل اش، کد کار کرد.
 

جدیدترین ارسال ها

بالا