2013-08-30 124 views
5

Tôi đang cố gắng thêm hình động động vào biểu mẫu C# win32 cho một ứng dụng chất lượng gần như sản xuất mà tôi đang cố gắng xây dựng và tôi đã giảm xuống khá nhiều.Làm cách nào để tạo hình ảnh động bằng nút bấm?

Sự cố tôi đang gặp phải là tôi dường như không thể thêm hình tượng hoặc điều khiển vào biểu mẫu động, trong một phương thức. Tôi đã thêm chúng vào biểu mẫu thông qua phương thức khởi tạo Form1, nhưng nếu tôi thêm điều khiển vào, ví dụ, phương thức button_click, nó sẽ không thêm chúng trừ khi tôi có vùng chứa bảng và gõ panel1.Controls.Add (stuff) . Nhưng, sau đó hình tượng xuất hiện ở một vị trí hoàn toàn khác so với dự định - và rõ ràng là, chính bảng điều khiển. Hầu hết các hình ảnh bị chặn bởi bảng điều khiển, và một phần của nó là-outide- bảng điều khiển. Tôi không biết chuyện gì đang xảy ra.

Dưới đây là đoạn code tôi đang sử dụng mà tôi đã học trực tuyến để thêm pictureboxes, trong một phương pháp nút bấm:

PictureBox pb = new PictureBox(); 
     pb.Size = new Size(this.Size.Width/14, this.Size.Width/12); //I use this picturebox simply to debug and see if I can create a single picturebox, and that way I can tell if something goes wrong with my array of pictureboxes. Thus far however, neither are working. 
     pb.BackgroundImage = Properties.Resources.cardback; 
     pb.BackgroundImageLayout = ImageLayout.Stretch; 
     pb.Location = new Point(50, 50); 
     pb.Anchor = AnchorStyles.Left; 
     pb.Visible = true; 
     InitializeComponent(); 
     this.Controls.Add(pb); 
     PictureBox[] pbName = new PictureBox[totaldeckcount]; 
     for (int i = 0; i < totaldeckcount; i++) 
     { 
      pbName[i] = new PictureBox(); 
      pbName[i].Size = new Size(this.Size.Width/14, this.Size.Width/12); 
      pbName[i].BackgroundImage = Properties.Resources.cardback; 
      pbName[i].BackgroundImageLayout = ImageLayout.Stretch; 
      pbName[i].Image = Properties.Resources.cardback; 
      pbName[i].Anchor = AnchorStyles.Left; 
      pbName[i].Visible = true; 
      int x = 0; 
      int y = 15; 
      if (i > 10) 
      { 
       y += (int)((this.Size.Height * i) + 30); 
      } 
      x = (int)((this.Size.Width/12) * Math.IEEERemainder(i, 10)); 
      pbName[i].Location = new Point(x, y); 
      this.Controls.Add(pbName[i]); 
     } 

Cardback là một kết cấu làm việc, tôi đã nhìn thấy điều bật lên khi tôi cố gắng tạo ra một hình tượng với nó trong phương thức Form1, vì vậy đó không phải là vấn đề. Vấn đề không xuất hiện - là cú pháp của tôi, vì tôi có thể sao chép mã số

PictureBox pb = new PictureBox(); 

trực tiếp vào phương thức Form1 và nó được thực hiện tốt.

Tôi không thể tìm thấy bất kỳ thứ gì trực tuyến qua google và điều này khiến tôi hoàn toàn bối rối.

+1

Xóa lệnh gọi 'InitializeComponent();' bên trong vòng lặp 'for'. – keyboardP

+2

Và xóa 'pbName [i] .Parent = this;' –

+0

@keyboardP Không có súc sắc, cùng một kết quả. Lý do duy nhất nó ở trong đó một vài lần là bởi vì tôi đã cố gắng để làm cho nó khởi tạo các pictureboxes, haha; nhưng loại bỏ một trong vòng lặp đã không làm gì, cùng một kết quả. Không có gì xuất hiện trên nút bấm. – Codefun64

Trả lời

2

Nó xuất hiện, vấn đề là có một hình tượng hoạt động như một hình nền cho chương trình, gần như là lớn như chính winform. Các picturebox chặn tất cả các điều khiển đã được lập trình tạo ra, do đó tạo cho ảo giác của mã không làm gì cả.

5

Có thể mã này giúp bạn có được khái niệm: Đây là một trong những tôi đang làm việc để tạo picturebox, hộp văn bản và nút động trong flowlayoutpanel.

PictureBox[] pics = new PictureBox[50]; 
    TextBox[] txts = new TextBox[50]; 
    Button[] butns = new Button[50]; 
    FlowLayoutPanel[] flws = new FlowLayoutPanel[50] 
    static int brh =0; 


    for (int i = 0; i < totalnumbers; i++) 
     { 
      flws[i] = new FlowLayoutPanel(); 
      flws[i].Name = "flw" + i; 
      flws[i].Location = new Point(3,brh); 
      flws[i].Size = new Size(317,122); 
      flws[i].BackColor = Color.DarkCyan; 
      flws[i].BorderStyle = BorderStyle.Fixed3D; 
      flws[i].Disposed += Form1_Disposed;    
      flws[i].Click += new EventHandler(butns_Click); 

      pics[i] = new PictureBox(); 
      pics[i].Location = new Point(953, 95 + brh); 
      pics[i].Name = "pic" + i; 
      pics[i].Size = new Size(300, 75); 
      pics[i].ImageLocation = "E:/image"+i; 
      flws[i].Controls.Add(pics[i]); 

      txts[i] = new TextBox(); 
      txts[i].Name = "txt" + i; 
      txts[i].Location = new Point(953, 186 + brh); 
      txts[i].TextChanged += Form1_TextChanged; 
      flws[i].Controls.Add(txts[i]); 

      butns[i] = new Button(); 
      butns[i].Click += new EventHandler(butns_Click); 
      butns[i].Text = "submit"; 
      butns[i].Name = "but" + i; 
      butns[i].Location = new Point(1100, 186 + brh); 

      flws[i].Controls.Add(butns[i]); 
      this.Controls.Add(flws[i]); 
      flowLayoutPanel1.Controls.Add(flws[i]); 
      brh += 130; 
     } 


private void butns_Click(object sender, EventArgs e) 
    { 
     // you can add the procces to perform after dynamically created button pressed 
    } 
+0

Xin lỗi, nhưng điều đó không giúp ích gì cho tôi; Tôi đã thử sử dụng bảng điều khiển flowlayout được tạo động trong một phương thức trong mã của tôi, nhưng vẫn không có gì xuất hiện trên màn hình của tôi. Nó giống như tôi bị nguyền rủa. – Codefun64