none
如何動態操作picturebox RRS feed

  • 問題

  •  

    c#2005中

    Form1有一按鈕和textbox

    每按一次按鈕  textbox會顯示不同值

    在form2中 小弟放了99個picturebox

    我希望在picturebox中產生兩種動作

    1.form2.picturebox.image=Image.FromFile("背景圖片")//載入背景圖片

    2.e.Graphics.DrawString(getbinbo, myfont, Brushes.Red, (float)pictureBox1.Location.X, (float)pictureBox1.Location.Y);//重繪form1中textbox1.txt的值

     

    在form1小弟實做了FindControl可以順利取得form2的picturebox

    form1_botton1中

                Form2 f2 = new Form2();
                f2.Tag = this;
                Control nowc;
                foreach (Control pic in f2.Controls)
                {
                    if (pic is PictureBox)
                    {
                        nowc = FindControl(pic, "pictureBox" + count.ToString());
                        if (nowc != null)
                        {
                          //想請問各位大大這裡我該如何寫  才能達到依照"count"的值來控制form2的picturebox

                            同時在載入背景和DrawString

                          f2.show();
                        }
                    }              
                } 

    感謝

    2009年1月3日 上午 02:25

解答

  • HI,

     

    您可以讓99個PictureBox都使用相同的Paint事件處理程序, 例如:

     

    pictureBox1.Paint+=PaintEventHandler(PaintProc);

    pictureBox2.Paint+=PaintEventHandler(PaintProc);

    ...

     

    tihs

    2009年1月4日 上午 02:14

所有回覆

  • HI,

     

    您可以利用迴圈將PictureBox物件放入集合中方便管理:

     

    List<PictureBox> pa=new List<PictureBox>();

    foreach (Control pic in f2.Controls)
    {

        if (pic is PictureBox)
        {
            pa.Add(pic);

        }

    }

     

    然後就可以依據count取用集合中的PictureBox物件

     

    tihs

     

    tihs

    2009年1月3日 下午 01:43
  •  tihs 寫信:

    HI,

     

    您可以利用迴圈將PictureBox物件放入集合中方便管理:

     

    List<PictureBox> pa=new List<PictureBox>();

    foreach (Control pic in f2.Controls)
    {

        if (pic is PictureBox)
        {
            pa.Add(pic);

        }

    }

     

    然後就可以依據count取用集合中的PictureBox物件

     

    tihs

     

    tihs

     

    感謝大大指導  又學到了一種方法

     

    但還有一個問題發生

    就是我去判斷 f2

    if(f2==null)

      f2.show();

    發現無法顯示form2

    難道是下面代碼所造成f2!=null(猜測??)

    foreach (Control pic in f2.Controls)
    {

        if (pic is PictureBox)
        {
            pa.Add(pic);

        }

    }

    可以請問如果是的話 這又是什麼樣的特性  百思不得其解

    感謝^^

    2009年1月3日 下午 05:41
  •  tihs 寫信:

    HI,

     

    您可以利用迴圈將PictureBox物件放入集合中方便管理:

     

    List<PictureBox> pa=new List<PictureBox>();

    foreach (Control pic in f2.Controls)
    {

        if (pic is PictureBox)
        {
            pa.Add(pic);

        }

    }

     

    然後就可以依據count取用集合中的PictureBox物件

     

    tihs

     

    tihs

    tihs 大大

    在請教一下 paint事件相關寫法

    因為小弟想實現 按一下FORM1的按鈕  FORM2的pic1才會重繪相關string  並非同時顯示

    因為事先寫在form2 pic1_paint事件中 f2.show就會馬上重繪顯示相同數值(我同時寫了f2.pic1,f2.pic2,f2.pic3的paint事件)

    而且小弟有99個picturebox難不成要重複貼99次(><)

    不知大大可否在指點

    感激感激

    謝謝

    2009年1月3日 下午 06:07
  • HI,

     

    應該這樣寫:

    if(f2!=null)

      f2.show();

     

    tihs

    2009年1月4日 上午 02:10
  • HI,

     

    您可以讓99個PictureBox都使用相同的Paint事件處理程序, 例如:

     

    pictureBox1.Paint+=PaintEventHandler(PaintProc);

    pictureBox2.Paint+=PaintEventHandler(PaintProc);

    ...

     

    tihs

    2009年1月4日 上午 02:14
  •  tihs 寫信:

    HI,

     

    您可以讓99個PictureBox都使用相同的Paint事件處理程序, 例如:

     

    pictureBox1.Paint+=PaintEventHandler(PaintProc);

    pictureBox2.Paint+=PaintEventHandler(PaintProc);

    ...

     

    tihs

     

    tihs大在請教一下

    我在form1中寫了paint委派事件的處理如下

     private void pictureBox_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
            {
                e.Graphics.DrawString(textBox1.Text, new Font("Arial", 10), Brushes.Red,  picL[count - 1].Location.X, picL[count -              1].Location.Y);
            }

     

    在from1_botton1_click事件寫入以下處理

      foreach (Control pic2 in f2.Controls)
      {

         if (pic2 is PictureBox)

           {

               picL[count - 1].Image = Image.FromFile("C:\\res\\bkimag.jpg");//這裡有載入相對應的背景圖片(有觸發到)

               picL[count - 1].Paint += new PaintEventHandler(pictureBox_Paint);  //這裡好像沒觸發到paint事件  因為沒有重繪我需要的文字~~怪

           }

      }

     

    請問小弟那裏有錯呢  我嘗試了滿多狀況  還是無法重繪相關string~~><

    感謝

    2009年1月4日 上午 05:29
  •  tihs 寫信:

    HI,

     

    您可以讓99個PictureBox都使用相同的Paint事件處理程序, 例如:

     

    pictureBox1.Paint+=PaintEventHandler(PaintProc);

    pictureBox2.Paint+=PaintEventHandler(PaintProc);

    ...

     

    tihs

     

    終於搞定了

    看來小弟還有的學

    事件委派得在下功夫

     

    這裡先感謝tihs 大大  熱情幫忙

    ^^

    2009年1月4日 下午 10:27