Di chuyển vật trong panel

làm sao để di chuyển 1 vật trong panel. mà panel nằm trong 1 form. và trong form có vài button. làm thế nào để khi dùng sữ kiện phím thì di chuyển vật trong panel

Edit : mình muốn đi chuyển trái banh trong panel

1 Like

Đơn giản là bạn chỉ cần học kĩ các công nghệ trong winform, không thể nào mà học mì ăn liền thế này được.

2 Likes

thi cũng đang học mà. làm mãi không ra? bạn giúp mình với.

1 Like

Di chuyển vật thì đơn giản là thay đổi thuộc tính Top với Left của nó.
Bắt sự kiện nhấn phím rồi tùy phím mà xử lí thôi.

2 Likes

có gọi rồi. những nó không đi chuyển

1 Like

Up code lên cho dễ phân tích nhé.
Nhớ format code.

2 Likes
   private void Form1_KeyDown(object sender, KeyEventArgs e)
    {            
        if (e.KeyCode == Keys.Left)
        {
            pictureBox1.Location = new Point(pictureBox1.Location.X - 10, pictureBox1.Location.Y);            
        }
        if (e.KeyCode == Keys.Right)
        {
            pictureBox1.Location = new Point(pictureBox1.Location.X + 10, pictureBox1.Location.Y);               
        }
    }
1 Like

Set thuộc tính KeyPreview của form thành true.
Có thể do sự kiện nhấn phím không gửi đến form mà gửi đến một control khác.

2 Likes

Mình có mấy cái như này muốn cmt :smiley:
Thứ nhất bạn đang hard code pos move - 10. Đừng bảo đang là eg đơn giản nên làm thế.
Set nó từ đầu lâu dần sẽ thành thói quen. Thấy bảo bạn đang tìm hiểu? Thật chất vẫn chưa tìm hiểu hết. Mình có thử search và thấy nó sờ sờ ra đầy goolge,stackoverflow… và mình cũng newbie trong lập trình. Những cái gì có thể search, đọc thì cố gắng tìm hiểu. Thật sự dnh quá nhiều câu hỏi được hỏi như này nhưng giải đáp đã có ở diễn đàn lẫn những topic trên nhiều ws khác.

1 Like

Học xong cơ bản về winform sẽ làm được vì cái này làm đơn giản mà ( if you can’t do it, you should learn how to use google first :))

bạn test thử trường hợp này chưa?

bạn giúp mình cái keyword được không?

first you need :
+ ActiveControl = panel1
+ previewkeydown event of panel1

  public Form1()
    {
        InitializeComponent();
        ActiveControl = panel1;// bắt buộc quan trọng
        panel1.PreviewKeyDown += Panel1_PreviewKeyDown;
    }
     //vấn đề của bạn là mỗi khi ấn key là button nó sẽ tự động focus nên không di chuyển được object

    // cái này để prevent ngăn không cho  button focus when press key
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (!msg.HWnd.Equals(Handle) &&
            (keyData == Keys.Left || keyData == Keys.Right ||
             keyData == Keys.Up || keyData == Keys.Down))
            return true;
        return base.ProcessCmdKey(ref msg, keyData);
    }
   // nhớ thêm event này cho panel1
    private void Panel1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
    {
        if (e.KeyCode == Keys.Left)
        {
            pictureBox1.Location = new Point(pictureBox1.Location.X - 10, pictureBox1.Location.Y);
        }
        if (e.KeyCode == Keys.Right)
        {
            pictureBox1.Location = new Point(pictureBox1.Location.X + 10, pictureBox1.Location.Y);
        }
    }

And it works:

ezgif-1-a88becbbd6

Bổ sung thêm Thêm ActiveControl = panel1 khi ấn vào button thì mới có thể di chuyển tiếp được
    private void Button1_Click(object sender, EventArgs e)
    {
        ActiveControl = panel1;
    }

Solution :wink:

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?