PDA

View Full Version : مشکل RightToLeft در richtextbox



samiasoft
سه شنبه 05 آذر 1398, 03:30 صبح
سلام وقت بخیر

یک چک باکس در فرم قرار دادم که کاربر با فعال کردن و یا غیرفعال کردن ان میتواند متن داخل ریچ تکست باکس را چپ به راست یا برعکس کند با این دستور :

private void checkBox_RightToLeft_CheckedChanged(object sender, EventArgs e) {
if (checkBox_RightToLeft.Checked)
{
richTextBox_descriptions.RightToLeft = RightToLeft.Yes;

}
else
{
richTextBox_descriptions.RightToLeft = RightToLeft.No;
}
}

مشکلی که وجود داره اینه وقتی متن فارسی را راست به چپ میکنم همانطور که در تصویر میبینید در سمت راست فضای خالی ایجاد میشود!!!!!!


http://s6.picofile.com/file/8379675400/r1.jpghttp://s6.picofile.com/file/8379675392/r2.jpg

به نظرتون مشکل از کجاست؟!

the king
سه شنبه 05 آذر 1398, 09:41 صبح
سلام وقت بخیر

یک چک باکس در فرم قرار دادم که کاربر با فعال کردن و یا غیرفعال کردن ان میتواند متن داخل ریچ تکست باکس را چپ به راست یا برعکس کند با این دستور :

private void checkBox_RightToLeft_CheckedChanged(object sender, EventArgs e) {
if (checkBox_RightToLeft.Checked)
{
richTextBox_descriptions.RightToLeft = RightToLeft.Yes;

}
else
{
richTextBox_descriptions.RightToLeft = RightToLeft.No;
}
}

مشکلی که وجود داره اینه وقتی متن فارسی را راست به چپ میکنم همانطور که در تصویر میبینید در سمت راست فضای خالی ایجاد میشود!!!!!!


http://s6.picofile.com/file/8379675400/r1.jpghttp://s6.picofile.com/file/8379675392/r2.jpg

به نظرتون مشکل از کجاست؟!
امتحان کنید :


private void checkBox_RightToLeft_CheckedChanged(object sender, EventArgs e)
{
var selectionStart = richTextBox_descriptions.SelectionStart;
var selectionLength = richTextBox_descriptions.SelectionLength;
richTextBox_descriptions.SelectAll();
richTextBox_descriptions.SelectionHangingIndent = 0;
richTextBox_descriptions.SelectionIndent = 0;
richTextBox_descriptions.SelectionRightIndent = 0;
richTextBox_descriptions.SelectionTabs = null;
richTextBox_descriptions.RightToLeft = (checkBox_RightToLeft.Checked) ? RightToLeft.Yes : RightToLeft.No;
richTextBox_descriptions.SelectionStart = selectionStart;
richTextBox_descriptions.SelectionLength = selectionLength;
}

samiasoft
سه شنبه 05 آذر 1398, 10:30 صبح
امتحان کنید :


private void checkBox_RightToLeft_CheckedChanged(object sender, EventArgs e)
{
var selectionStart = richTextBox_descriptions.SelectionStart;
var selectionLength = richTextBox_descriptions.SelectionLength;
richTextBox_descriptions.SelectAll();
richTextBox_descriptions.SelectionHangingIndent = 0;
richTextBox_descriptions.SelectionIndent = 0;
richTextBox_descriptions.SelectionRightIndent = 0;
richTextBox_descriptions.SelectionTabs = null;
richTextBox_descriptions.RightToLeft = (checkBox_RightToLeft.Checked) ? RightToLeft.Yes : RightToLeft.No;
richTextBox_descriptions.SelectionStart = selectionStart;
richTextBox_descriptions.SelectionLength = selectionLength;
}


متشکرم دوست عزیز...اما مشکل با این دستورات حل نشد متاسفانه

پروژه مربوطه رو ضمیمه کردم ممنون میشوم درصورت امکان تست کنید

mr.sirwan
سه شنبه 05 آذر 1398, 10:40 صبح
سلام وقت بخیر

یک چک باکس در فرم قرار دادم که کاربر با فعال کردن و یا غیرفعال کردن ان میتواند متن داخل ریچ تکست باکس را چپ به راست یا برعکس کند با این دستور :

private void checkBox_RightToLeft_CheckedChanged(object sender, EventArgs e) {
if (checkBox_RightToLeft.Checked)
{
richTextBox_descriptions.RightToLeft = RightToLeft.Yes;

}
else
{
richTextBox_descriptions.RightToLeft = RightToLeft.No;
}
}

مشکلی که وجود داره اینه وقتی متن فارسی را راست به چپ میکنم همانطور که در تصویر میبینید در سمت راست فضای خالی ایجاد میشود!!!!!!


http://s6.picofile.com/file/8379675400/r1.jpghttp://s6.picofile.com/file/8379675392/r2.jpg

به نظرتون مشکل از کجاست؟!

خیلی وقته با ریچ تکست باکس کار نکردم، فک کنم پراپرتی ای با عنوان Alignment داره که توسطش میتونید موقعیت متن رو تنظیم کنید

samiasoft
سه شنبه 05 آذر 1398, 10:55 صبح
خیلی وقته با ریچ تکست باکس کار نکردم، فک کنم پراپرتی ای با عنوان Alignment داره که توسطش میتونید موقعیت متن رو تنظیم کنید

ممنون بدین صورت اگر منظورتونه :
richTextBox_descriptions.SelectAll();
richTextBox_descriptions.SelectionAlignment = (checkBox_RightToLeft.Checked) ? HorizontalAlignment.Right : HorizontalAlignment.Left;

اینو چندبار اگر اجرا کنم متن درست میشه!!!

the king
سه شنبه 05 آذر 1398, 15:25 عصر
ممنون بدین صورت اگر منظورتونه :
richTextBox_descriptions.SelectAll();
richTextBox_descriptions.SelectionAlignment = (checkBox_RightToLeft.Checked) ? HorizontalAlignment.Right : HorizontalAlignment.Left;

اینو چندبار اگر اجرا کنم متن درست میشه!!!
چند بار؟ اگه موثر باشه منطقی است که همون بار اول کافی باشه. عجیبه.

mmbguide
سه شنبه 05 آذر 1398, 21:11 عصر
سلام

اگر متن شامل متون انگلیسی و هم فارسی باشه چطور میشه یک خط خاص رو RTL کرد؟

ممنون

the king
سه شنبه 05 آذر 1398, 22:44 عصر
سلام

اگر متن شامل متون انگلیسی و هم فارسی باشه چطور میشه یک خط خاص رو RTL کرد؟

ممنون
من صرفا با روش تزریق کد های RTF میدونم :


private void button1_Click(object sender, EventArgs e)
{
var line = richTextBox1.GetLineFromCharIndex(richTextBox1.Get FirstCharIndexOfCurrentLine());
if (line == richTextBox1.Lines.Length - 1)
{
richTextBox1.AppendText("\r");
}
richTextBox1.SelectionStart = richTextBox1.GetFirstCharIndexFromLine(line);
richTextBox1.SelectionLength = richTextBox1.GetFirstCharIndexFromLine(line + 1) - richTextBox1.SelectionStart;
richTextBox1.SelectedRtf = richTextBox1.SelectedRtf.Replace("\\ltrpar", "\\rtlpar");
}