Di chuyển vật trong panel

winforms

(Devil Night) #1

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


(明玉) #2

Đơ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.


(Devil Night) #3

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


(Vuio) #4

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.


(Devil Night) #5

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


(Vuio) #6

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


(Devil Night) #7
   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);               
        }
    }

(Vuio) #8

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.


(TN) #9

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.


(!IsProgrammer) #10

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 :))


(Devil Night) #11

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


(Devil Night) #12

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


(!IsProgrammer) #13

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:


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