【问题标题】:C# - edit text property for tab pages at runtimeC# - 在运行时编辑标签页的文本属性
【发布时间】:2014-05-06 06:04:26
【问题描述】:

我有一个标签控件,我可以在其中添加新标签页,在文本框中键入要为每个标签显示的名称。我想要做的是能够右键单击选项卡并重命名它(以允许我编辑文本),就像许多其他应用程序中的选项一样......我已经有一个“删除选项卡”选项并且工作,但我找不到重命名所选选项卡的方法..

非常感谢任何帮助!

如果有任何帮助,这是我的删除选项代码..

public Form1()
    {
        InitializeComponent();
        ContextMenu cm = new ContextMenu();
        cm.MenuItems.Add("Remove", new EventHandler(rmv_click));
        cm.MenuItems.Add("Rename");
        tabControl1.ContextMenu = cm;


    }
//select tab on right mouse click
        private void tabControl_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                for (int i = 0; i < this.tabControl1.TabCount; ++i)
                {
                    if (this.tabControl1.GetTabRect(i).Contains(new Point(e.X, e.Y)))
                    {
                        this.tabControl1.SelectedIndex = i;
                        break;
                    }
                }
            }
        }

//remove selected tab
    private void rmv_click(object sender, System.EventArgs e)
    {
        tabControl1.TabPages.Remove(tabControl1.SelectedTab);
    }

【问题讨论】:

    标签: c# edit tabcontrol tabpage


    【解决方案1】:

    你可以这样做:(又快又脏)

     public Form1()
            {
                InitializeComponent();
                ContextMenu cm = new ContextMenu();
                cm.MenuItems.Add("Remove", new EventHandler(rmv_click));
                cm.MenuItems.Add("Rename", new EventHandler(rename_click));
                tabControl1.ContextMenu = cm;
            }
    
            //select tab on right mouse click
            private void tabControl_MouseDown(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Right)
                {
                    for (int i = 0; i < this.tabControl1.TabCount; ++i)
                    {
                        if (this.tabControl1.GetTabRect(i).Contains(new Point(e.X, e.Y)))
                        {
                            this.tabControl1.SelectedIndex = i;
                            break;
                        }
                    }
                }
            }
    
            //remove selected tab
            private void rmv_click(object sender, System.EventArgs e)
            {
                tabControl1.TabPages.Remove(tabControl1.SelectedTab);
            }
    
            //rename selected tab
            private void rename_click(object sender, System.EventArgs e)
            {
                var showDialog = this.ShowDialog("Tab Name", "Rename the selected tab");
                tabControl1.SelectedTab.Text = showDialog;
            }
    
            public string ShowDialog(string text, string caption)
            {
                Form prompt = new Form();
                prompt.Width = 500;
                prompt.Height = 150;
                prompt.Text = caption;
                Label textLabel = new Label() { Left = 50, Top = 20, Text = text };
                TextBox textBox = new TextBox() { Left = 50, Top = 50, Width = 400 };
                Button confirmation = new Button() { Text = "Ok", Left = 350, Width = 100, Top = 70 };
                confirmation.Click += (sender, e) => { prompt.Close(); };
                prompt.Controls.Add(confirmation);
                prompt.Controls.Add(textLabel);
                prompt.Controls.Add(textBox);
                prompt.ShowDialog();
                return textBox.Text;
            }
    

    将 ShowDialog 方法归功于 Bas Brekelmans。原件可以找到here

    【讨论】:

    • 感谢您的回答,工作正常 :) 但我实际上正在寻找一种解决方案,无需打开新窗口即​​可直接编辑名称。无论如何,我将使用您的解决方案继续使用其他功能,当我有时间时,我会更深入地研究。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多