c#鼠标上的动态面板

时间:2017-11-30 12:07:46

标签: c# button dynamic panel

我正在制作N * M尺寸的SUDOKU游戏。每个号码都在一个按钮上。 当程序启动时,所有按钮都是空的,我想如果我点击一个按钮就可以在它上面做一个小面板,每个数字的按钮可以选择一个。

    private void adatB_Click(object sender, EventArgs e)
    {
        Button button = sender as Button;
        int[] hely = button.Tag.ToString().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(Int32.Parse).ToArray();
        Panel szamok = new Panel
        {
            Location = MousePosition,
            Size = new Size(100, 100)
        };
        Controls.Add(szamok);
        TableLayoutPanel minitabla = new TableLayoutPanel
        {
            Dock = DockStyle.Fill,
            ColumnCount = szorzat,
            RowCount = szorzat,
        };
        for (int i = 0; i < szorzat; i++)
        {
            minitabla.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            minitabla.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
        }
        szamok.Controls.Add(minitabla);
        Button[,] szamokB = new Button[meret[0], meret[1]];
        int d = 1;
        for (int i = 0; i < meret[0]; i++)
        {
            for (int j = 0; j < meret[1]; j++)
            {
                szamokB[i, j] = new Button();
                szamokB[i, j].Tag= hely[0]+","+hely[1];
                szamokB[i, j].Text = d.ToString();
                szamokB[i, j].Dock = DockStyle.Fill;
                szamokB[i, j].Click += szamokB_Click;
                minitabla.Controls.Add(szamokB[i, j], i, j);
                d++;
            }
        }
    }

    private void szamokB_Click(object sender, EventArgs e)
    {
        Button button = sender as Button;
        int[] hely = button.Tag.ToString().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(Int32.Parse).ToArray();
        adatB[hely[0], hely[1]].Text = button.Text;
    }

单击按钮时未显示窗格的问题。 meret [0]变量是N,meret [1]是M,adatB是按钮的arry,标签中有positons。 如果我选择了这个号码怎么能关闭那个小组?

1 个答案:

答案 0 :(得分:1)

首先,您应该正确计算鼠标位置。

来自MSDN:

  

获取鼠标光标在屏幕坐标中的位置。

你应该使用这样的东西:

export default class Parent extends Component {
    construtor(props) {
        super(props);
    }

    viewData = () => {
        window.open('childcomponent.js','Data','height=250,width=250');
    }

    render() {
        return (
            <div> <a onclick={this.viewData}>View Data</a></div>
        )
    }
}

您可能需要这样做,将您的面板放在前面:

Location = new Point(MousePosition.X - this.Location.X, MousePosition.Y - this.Location.Y)

要关闭面板,您可以存储选择器面板,稍后可以从控件中将其删除,使用如下内容:

Controls.Add(szamok);
szamok.BringToFront();