#c# #winforms #user-interface #windows-forms-designer #metroframework
#c# #winforms #пользовательский интерфейс #windows-forms-designer #metroframework
Вопрос:
Я не уверен, с чего начать здесь, чтобы устранить неполадки и поработать над сторонним кодом, чтобы попытаться исправить это, поэтому я подумал, что спрошу здесь и покажу экран проблемы. Я использую сторонний пакет Windows form «metro controls» от https://thielj.github.io/MetroFramework / и он выглядит немного устаревшим и больше не поддерживается, и единственная реальная проблема, с которой я сталкиваюсь, заключается в том, что элемент управления tab, похоже, содержит дополнительный «мусор» для рендеринга, который исчезает при нажатии на него. Но я не знаю, почему он нарисован в первую очередь или как его удалить / исправить и обновить пакет на github. Пакет пользовательского интерфейса полезен, он делает простой проект Windows form намного приятнее и имеет гораздо лучший пользовательский интерфейс, поэтому я его выбрал.
Кто-нибудь знаком с этой библиотекой и имеет похожие проблемы или знает, как лучше всего подойти к ее исправлению самостоятельно? Имейте в виду, что я вообще не знаком с частью Windows forms для рисования / графического интерфейса и обычно ссылаюсь на онлайн-материалы, когда дело доходит до рисования или работы с типом пользовательского интерфейса.
Комментарии:
1. Кажется
Control.Invalidate
, вызов отсутствует. Попробуйте вызвать этот метод рассматриваемого элемента управления из соответствующего события. Например, когда он отображается, активируется, изменяется … и т. Д. И посмотрите, как это происходит.2. Никакого эффекта, это также приводит к тому, что дочерние элементы становятся недействительными / перерисовываются или я должен выборочно попробовать это на куче элементов управления, вложенных вниз, которые я тоже добавил? Странно, что это также отображается в Visual Studio designer, а также в запущенном приложении…
3. Перейдите
true
также к аннулированию дочерних элементов :Control.Invalidate(true);
.Control
Здесь означает рассматриваемый элемент управления metro.4. Похоже, это не работает, я готов связаться с фрилансерами, чтобы посмотреть / улучшить и сделать PR для репозитория MetroFramework, если он больше не поддерживается за плату, поскольку это коммерческий проект, с которым у нас возникли проблемы :). Я попытался просмотреть исходный код и попытаться понять, где проблема может быть экспериментом, но пока безуспешно, то же самое касается некоторых других незначительных проблем, с которыми я сталкиваюсь: (.
5. О, жаль это слышать. Возможно, пришло время создать собственную библиотеку пользовательского интерфейса. Это увлекательное и познавательное путешествие. Также вы можете попробовать WPF, у него гораздо больше возможностей.
Ответ №1:
Оказалось, что вместо этого я нашел эту библиотеку (немного новее / больше обновлений) https://www.nuget.org/packages/MetroModernUI / но у меня все еще есть некоторые похожие проблемы, с которыми я сталкиваюсь, однако я немного изменил код, чтобы помочь решить одну из проблем, с которой я сталкиваюсь, жизненный цикл события OnDrawItem, похоже, исчез для установки свойства OwnerDrawFixed для элемента управления tab.
Вот код, который я изменил в MetroTabControl.cs, и я просто использую локальную версию / сборку для поддержки любых настроек и улучшений, которые я должен сделать, поскольку у меня есть несколько других проблем.
private void DrawTab(int index, Graphics graphics)
{
Color foreColor;
Color backColor = BackColor;
if (!useCustomBackColor)
{
backColor = MetroPaint.BackColor.Form(Theme);
}
TabPage tabPage = TabPages[index];
Rectangle tabRect = GetTabRect(index);
if (!Enabled || tabDisable.Contains(tabPage.Name))
{
foreColor = MetroPaint.ForeColor.Label.Disabled(Theme);
}
else
{
if (useCustomForeColor)
{
foreColor = DefaultForeColor;
}
else
{
foreColor = !useStyleColors ? MetroPaint.ForeColor.TabControl.Normal(Theme) : MetroPaint.GetStyleColor(Style);
}
}
if (index == 0)
{
tabRect.X = DisplayRectangle.X;
}
Rectangle bgRect = tabRect;
tabRect.Width = 20;
using (Brush bgBrush = new SolidBrush(backColor))
{
graphics.FillRectangle(bgBrush, bgRect);
}
TextRenderer.DrawText(graphics, tabPage.Text, MetroFonts.TabControl(metroLabelSize, metroLabelWeight),
tabRect, foreColor, backColor, MetroPaint.GetTextFormatFlags(TextAlign));
//HACK not properly handling the owner draw fixed event/override life cycle so we can fire it ourselves and if something is listening
// it will execute
if (this.DrawMode == TabDrawMode.OwnerDrawFixed)
{
OnDrawItem(new DrawItemEventArgs(graphics, this.Font, tabRect, index, DrawItemState.None));
}
}
Для другой проблемы с пользовательским интерфейсом я отслеживаю, где я могу сделать недействительными или исправить нечетные дополнительные кнопки / интерактивные исчезающие области в элементе управления вкладками или панелях для этой среды улучшения пользовательского интерфейса.
Ответ №2:
Происходит то, что должна быть какая-то ошибка, связанная с размером MetroTabControl, и вы можете исправить это с помощью следующего кода:
this.metroTabPage1.VerticalScrollbarBarColor = false;
this.metroTabPage1.VerticalScrollbarSize = 0;