2014-11-06 4 views
-1

им интересно, как я могу создать такое меню (изображение ниже) в C# WebForms, так как я смотрел его как вкладки или что-то, но они не используют вкладки, мне интересно, как я могу сделайте это с помощью компонентов, предоставляемых на VS, идея состоит в том, что когда пользователь нажимает на кнопку в изменениях, только часть под элементами управления, какой компонент они используют? надеюсь, вы можете мне помочь. Создать меню табуляции с кнопками

Во втором изображении меню наверху, панель управления меню (видимо, это панель, все еще не уверена) в этом изменении содержимого в зависимости от выбранной кнопки, работает как вкладка, отображает содержимое Выбранная кнопка, я хочу повторить этот режим работы без использования вкладок для Visual Studio, так как интерфейс сильно отличается

enter image description here

+0

Я действительно не уверен, что именно вы имеете в виду. Может быть, кнопки с государством? Может быть, CheckBox с внешним видом = Button? Или что делают кнопки с содержанием ниже? Или изображения? (Обе вкладки, кнопки и флажки могут иметь их.) Также, что показывает второе изображение, ваше приложение atm или то, что вы хотите? – TaW

+0

Во втором изображении меню наверху, панель управления меню (видимо, это панель, все еще не уверена) в этом изменении содержимого в зависимости от выбранной кнопки, работает так, как вкладка отображает содержимое выбранной кнопки, я хочу для тиражирования этого режима работы без использования вкладок для визуальной Studio, так как интерфейс очень отличается. – Kross

+0

Если вы хотите использовать закругленные кнопки в winforms, вам может потребоваться их рисовать. Я думаю, что Tabcontrols с внешним видом = Кнопки придут довольно близко. – TaW

ответ

1

Что будет лучше во многом зависит от того, насколько вы хотите подражать сайт вы упоминаете.

Там действительно две части, чтобы принять решение о:

  • Внешний вид меню
  • выработках содержания под

Вот решение, которое использует регулярные TabControl для держите весь контент в обычном TabPages.

Вы имели бы макет и скрипт, как обычно, включая страницы «Тексты и изображения».

Затем вы добавляете FlowLayoutPanel к форме и коду ниже.

Метод initMenu затем создает стили RadioButton в качестве кнопки, дополняющей текст и изображение для каждой вкладки. Он также позволяет кнопке для последней страницы выравниваться вправо и, конечно же, выбирает соответствующую страницу при нажатии.

private void Form2_Load(object sender, EventArgs e) 
{ 
    initMenu(tabControl1, flp_menu); 
} 


void initMenu(TabControl TAB, FlowLayoutPanel FLP) 
{ 
    FLP.BringToFront(); 
    FLP.Location = TAB.Location; 
    FLP.Width = TAB.Width; 
    FLP.Height = TAB.ItemSize.Height + 1; 
    RadioButton bt; 
    foreach (TabPage tp in TAB.TabPages) 
    { 
     bt = new RadioButton(); 
     bt.Appearance = Appearance.Button; 
     bt.FlatStyle = FlatStyle.Flat; 
     bt.FlatAppearance.CheckedBackColor = Color.Gold; 
     // if you color-code the pages this may be nice, too: 
     // bt.FlatAppearance.CheckedBackColor = tp.BackColor; 
     bt.Image = imageList1.Images[tp.ImageIndex]; 
     bt.ImageAlign = ContentAlignment.MiddleLeft; 
     bt.TextAlign = ContentAlignment.MiddleRight; 
     bt.Margin = new Padding(4, 2, 0, 0); 
     bt.Text = "  " + tp.Text + " "; 
     bt.AutoSize = true; 
     bt.Tag = tp; 
     FLP.Controls.Add(bt); 
     bt.CheckedChanged += (sender, e) => 
      { TAB.SelectedTab = (TabPage)((RadioButton)(sender)).Tag; }; 

    } 
    bt = (RadioButton) FLP.Controls[FLP.Controls.Count - 1]; 
    int right = FLP.Controls[FLP.Controls.Count - 2].Right; 
    bt.Margin = new Padding(FLP.Width - right - bt.Width - 6, 2, 2, 3); 

    FLP.Resize += (sender, e) => 
     { 
      bt = (RadioButton)FLP.Controls[FLP.Controls.Count - 1]; 
      right = FLP.Controls[FLP.Controls.Count - 2].Right; 
      bt.Margin = new Padding(FLP.Width - right - bt.Width - 6, 2, 2, 3); 
     }; 
} 

Вот скриншот, где вы можете увидеть, что нормальные ушки все покрыты панелями меню:

radioMenu4Tab

Tab управление является простым способом провести несколько страниц готовы, как к отображение пользователю, а также разработчику для компоновки и кода.

Если вы предпочитаете не жить с небольшой рамкой вокруг элемента управления Tab, вы можете использовать небольшой трюк, который я описал here и here. Он использует TabControl только для разработчика; во время выполнения TabControl скрыт, и выбранный контент перемещается в другой контейнер. Чтобы он работал над потребностями другого контейнера, очевидно, а также одной панели на странице, чтобы сохранить весь контент страницы, поскольку TabPages может жить только в TabControl.

Смежные вопросы