OR - Как сбрить коалу, чтобы остановить ее, глядя в сквошен. (Но я не думал, что это сделает подходящий техник)Как связать кнопку с элементом управления?
Проблема: у вас есть три изображения предварительного просмотра, полученные из основного изображения. Изображения предварительного просмотра изменяются для стандартизованных пространств изображений на веб-сайте компании, основным изображением может быть любое изображение любого размера из любого места.
Пример: основное изображение представляет собой изображение высокого разрешения коала-медведя размером 2000x2250. Ваши предварительные просмотры хотят отображать коалу 200x200, 200x50 и 250x150.
Ваша служебная программа изменяет размер и растягивает исходное изображение до трех ваших «фактических размеров», но каждый превью выглядит немного сквошно, и вы знаете, что все ненавидят, чтобы увидеть раздавленную коалу.
Чтобы решить эту проблему, вы добавляете к своей программе небольшой способ обрезки, который берет пять пикселей из предварительного просмотра на желаемой стороне. Это означает, что вы должны иметь возможность изменять размер вашего изображения и не показывать свою коалу, сбрасывая ненужные части изображения.
Вы добавляете четыре кнопки в каждое окно изображения для предварительного просмотра и создаете четыре общих метода для отправки правильных инструкций по бритью методу обрезки. Вы хотите связать каждую конкретную кнопку с определенным кадром в форме, но вы хотите отправить все события кликов на четыре общие функции.
Как вы сообщаете общую функцию, какую из трех изображений предварительного просмотра изображений вы хотите, чтобы бриться элегантным и прекрасным способом?
Пример кода:
//cropPict=method for cropping the picture in the relevant picturebox.
//CropSide=a little enum which tells the method which side to crop.
private void btnT_Click(object sender, EventArgs e)
{
cropPict(/*Reference to PictureBox Goes Here*/, CropSide.Top);
}
private void btnB_Click(object sender, EventArgs e)
{
cropPict(/*Reference to PictureBox Goes Here*/, CropSide.Bottom);
}
private void btnR_Click(object sender, EventArgs e)
{
cropPict(/*Reference to PictureBox Goes Here*/, CropSide.Right);
}
private void btnL_Click(object sender, EventArgs e)
{
cropPict(/*Reference to PictureBox Goes Here*/, CropSide.Left);
}
EDIT: Как это происходит, вдохновленный Ганса ниже, а не только начинку PictureBox в тег. Какой была отличная идея, я на самом деле поставить KeyValuePair в тег для каждой кнопки следующим образом:
btnCCB.Tag = new KeyValuePair<CropSide,PictureBox>(CropSide.Bottom,pbxKoala);
btnCCL.Tag = new KeyValuePair<CropSide, PictureBox>(CropSide.Left, pbxKoala);
btnCCR.Tag = new KeyValuePair<CropSide, PictureBox>(CropSide.Right, pbxKoala);
btnCCT.Tag = new KeyValuePair<CropSide, PictureBox>(CropSide.Top, pbxKoala);
Тогда я мог бы просто провод все кнопки вверх к один обработчик событий так:
private void btnC_Click(object sender, EventArgs e)
{
Button btnSend = (Button)sender;
KeyValuePair<CropSide, PictureBox> kvCrop = (KeyValuePair<CropSide, PictureBox>)btnSend.Tag;
cropPict(kvCrop.Value,kvCrop.Key);
}
Конечно, есть еще много чего поделать, но это в значительной степени разобрало мою проблему. Спасибо, Ханс!
«Как брить Коала» был бы прекрасным названием. – jacknad
Я знаю, что это не вопрос, - но почему бы просто не изменить размер изображения без искажения пропорции. Тогда вам не нужно ничего обрезать. – asawyer
@JackN: Да, но моя злокачественная железа сегодня не является чрезмерной. –