2012-05-06 5 views
0

В формах C# Я создал функцию, которая будет, как только вызывается, создать PictureBox с желаемыми изображениями, размером и расположением:C# изменение фонового изображения нескольких элементов управления

private void NewPic(string nName, int locX, int locY, int SizX, int SizY, Image Img) 
{ 
    PictureBox Pic = new PictureBox(); 
    Pic.Name = nName; Pic.Image = Img; 
    Pic.BackColor = Color.Transparent; 
    Pic.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; 
    Pic.Size = new System.Drawing.Size(SizX, SizY); 
    Pic.Location = new System.Drawing.Point(locX, locY); 
    Controls.Add(Pic); 
    Pic.Click += new EventHandler(Pic_Click); 
} 

Теперь, когда мне нужна фотография Я просто делаю это:

NewPic("FIRE", 32, 100, 120, 120, Properties.Resources.Image); 

проблема, в случае щелчка, когда я нажимаю на PictureBox Я хочу, чтобы изменить его фоновое изображение, но, если я нажимаю некоторые другие PictureBox Я хочу, чтобы последний сброс it self:

private void Pic_Click(object sender, System.EventArgs e) 
{ 
    PictureBox pb = (PictureBox)sender; 
    switch (pb.Name) 
    { 
     case "1": 
      pb.BackgroundImage = Properties.Resources.OtherImg; //creates the background 
      pb.BackgroundImageLayout = ImageLayout.Stretch; 
       //INSERT CODE HERE: to remove from other if it has 
      break; 
     case "2": 
      pb.BackgroundImage = Properties.Resources.OtherImg; //creates the background 
      pb.BackgroundImageLayout = ImageLayout.Stretch; 
       //INSERT CODE HERE: to remove from other if it has 
      break; 
     } 
    } 

мне нужен код, который может быть применен к нескольким PictureBoxes/объектов, а не только два

ответ

1

Я думаю, вам нужно сохранить изображение последней коробки изображения слишком

PictureBox _lastPictureBox = null; 
Image _lastPictureBoxImage = null; 

private void Pic_Click(object sender, System.EventArgs e) 
{ 
    PictureBox pb = (PictureBox)sender; 
    if (_lastPictureBox != null) 
    { 
     // update the previous one, eg: 
     _lastPictureBox.BackgroundImage = _lastPictureBoxImage; 
    } 

    // now set it to the current one: 
    _lastPictureBox = pb; 
    _lastPictureBoxImage = pb.Image; 
    switch (pb.Name) 
    { 
    case "1": 
     pb.BackgroundImage = Properties.Resources.OtherImg; //creates the background 
     pb.BackgroundImageLayout = ImageLayout.Stretch; 
    break; 
    case "2": 
     pb.BackgroundImage = Properties.Resources.OtherImg; //creates the background 
     pb.BackgroundImageLayout = ImageLayout.Stretch; 
    break; 
    } 

}

+0

Y> es, вот что мне не хватало, спасибо и спасибо всем. Если у вас есть больше предложений, я буду рассматривать их все :) –

+0

«Оператор switch» также кажется повторяющимся и может быть устранен, если для каждого окна изображения есть одинаковое фоновое изображение. –

+0

это ... пожалуйста, уточните? –

1

Самый простой способ сделать это, чтобы добавить элемент в форму, которая будет отслеживать ранее щелкнул PictureBox:

PictureBox _lastPictureBox = null; 

В обработчике, проверьте, если _lastPictureBox имеет значение, и обновлять его по мере необходимости:

private void Pic_Click(object sender, System.EventArgs e) 
{ 
    PictureBox pb = (PictureBox)sender; 
    if (_lastPictureBox != null) 
    { 
     // update the previous one, eg: 
     _lastPictureBox.BackgroundImage = Properties.Resources.FirstImg; 
    } 

    // now set it to the current one: 
    _lastPictureBox = pb; 

    switch (pb.Name) 
    { 
    case "1": 
     pb.BackgroundImage = Properties.Resources.OtherImg; //creates the background 
     pb.BackgroundImageLayout = ImageLayout.Stretch; 
     break; 
    case "2": 
     pb.BackgroundImage = Properties.Resources.OtherImg; //creates the background 
     pb.BackgroundImageLayout = ImageLayout.Stretch; 
     break; 
    } 
} 
+0

Ммм, я думаю, что это не работает. проблема в том, что у меня есть 4 созданных изображения, поэтому они не пустые, поэтому когда _lastpicturebox = null ничего не произойдет, так как у меня нет пустых ящиков с изображениями. –

+0

@AntonioTehSumtin _lastPictureBox сначала имеет значение null, поэтому он ничего не делает. Но в первый раз, когда пользователь нажимает на изображение, _lastPictureBox получает ссылку на это изображение (чтобы вы могли сбросить его при следующем щелчке). – McGarnagle

0

, если я вас правильно понимаю, что вам нужно глобальную переменную

PictureBox lastbox; 

, то вы можете вставить этот код:

lastbox.Image = Properties.Resources.Image; 
lasbox = pb; 
+0

Прошу прощения, но я действительно не думаю, что вы слишком много помогли ^^ 'спасибо за то, что вы очень ценили. :) –

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