2013-05-21 4 views
0

У меня есть небольшой проект в C# (приложение Windows Forms). У меня есть форма 77 PictureBoxes (pictureBox1, pictureBox2, pictureBox3, ...), и я хочу управлять ими, но из нового класса (Access.cs), объявив новый однокадровый ящик в классе для управления всеми изображениями.Управление PictureBox из класса

Потому что это слишком долго, если я пройду через каждый pictureBox и добавлю метод щелчка и скопирую + вставляю код и каждый раз меняю номер pictureBox.

Я установил картины, как общественный и попытался следующий код:

Access.cs:

using System.Windows.Forms; 

public class Access 
{ 
    PictureBox picBox = new PictureBox(); 

    public void PictureClicked() 
    { 
     picBox.Image = Properties.Resources.apple; 
    } 
} 

Form1.cs:

private void pictureBox1_Click(object sender, EventArgs e) 
{ 
    Access ac = new Access(); 
    ac.PictureClicked(); 
} 

но код не Работа!!

+0

А что случилось, когда вы пробовали этот код? С другой стороны, почему так много ящиков? Вам действительно нужны все они? –

+0

Почему вы не можете просто передать объект отправителя и отправить его в качестве параметра вашему методу PictureClicked? –

+0

код не работал .. к сожалению да !! – John

ответ

3

Я действительно не получить то, что вы хотите сделать, но вы могли бы попытаться отправить объект в класс доступа:

private void pictureBox1_Click(object sender, EventArgs e) 
{ 
    Access ac = new Access(); 
    ac.PictureClicked(sender); 
} 


public void PictureClicked(Object Sender) 
{ 
      picBox = (PictureBox)Sender; 
      picBox.Image = Properties.Resources.apple; 
} 
+0

Благодарим вас за код :) – John

+0

Я рад помочь –

+0

после того, как я написал ваш код, я объявил это в классе: Form1 myForm = new Form1(); использовать imageList1 из формы. но когда я отлаживаю программу, я получаю исключение StackOverFlowException. и когда я запускаю программу без отладки, всплывающее окно сообщает мне, что программа перестала работать. Вы знаете, почему это ?! – John

1

Access.Cs

public void pictureBox1_Click(object sender, EventArgs e) 
     { 
      PictureBox pi = (PictureBox)sender; 

      pi.Image = Properties.Resources.alert__2_; 
     } 

Form1.cs

private void pictureBox2_Click(object sender, EventArgs e) 
     { 
      Form1 c =new Form1(); 
      c.pictureBox1_Click(sender, e); 


     } 

Здесь картинкаBox2_Скрыть это событие для всех изображений

Смежные вопросы