Свойство RightToLeft в форме в C#
-
03-07-2019 - |
Вопрос
Я хочу переместить заголовок формы, значок и кнопку закрытия, а также кнопки справки с левой стороны на правую (изменить макет).
Я переместил элементы управления формы вручную, чтобы сохранить фоновое изображение, но теперь хочу изменить заголовок формы.
Когда я устанавливаю для свойства rightToLeft значение «да», а для свойства rightToLeftLayout — значение true в свойствах формы, фоновое изображение исчезает, но оно использует свойство «BackColor».
Мой код выглядит следующим образом:
if (_lang == 'Arabic')
{
this.RightToLeft = RightToLeft.Yes;
this.RightToLeftLayout = true;
}
Но изображение кнопок сохраняется.
Так почему же это?
Решение
В дополнение к ответу Блаунти в спецификациях MSDN четко указано, что BackgroundImage, Opacity и другие не поддерживаются при использовании RightToLeftLayout:
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.righttoleftlayout(vs.80).aspx:
Отрисовка владельца не поддерживается, если для параметра RightToLeftLayout установлено значение Да.События отрисовки владельца по-прежнему будут происходить, но поведение любого кода, который вы создаете в этих событиях, не определено.Кроме того, не поддерживаются BackgroundImage, Opacity, TransparencyKey и события рисования.
Другие советы
BackgroundImage, Opacity, TransparencyKey и события рисования не поддерживаются, если для параметра RightToLeftLayout установлено значение «да».
Заменить утраченный функционал довольно легко:
protected override void OnPaintBackground(PaintEventArgs e) {
Rectangle rc = new Rectangle(Point.Empty, this.ClientSize);
e.Graphics.DrawImage(Properties.Resources.SampleImage, rc);
}
Вам придется проделать немного больше работы, если вам нужно расположить изображение плиткой.