2011-12-28 1 views
2

У меня есть панель под названием panel3, которая находится в 'Form1.cs'. В этой панели я нарисовал 5 строк для представления музыкального персонала.C# Добавление фотошопа на панель

Теперь я хочу добавить картинку записки, нажатой на фортепиано, в музыкальный коллектив. В принципе, я хочу добавить блок изображения в определенном месте на музыкальном персонале.

Для этого я создал метод 'AddPictureBox' в 'Staff.cs' для создания окна изображения и размещения его на панели каждый раз при нажатии клавиши.

Это код. Проблема заключается в том, что окно изображения не отображается на панели. На панели 3 видны только линии, которые были нарисованы ранее.

Что я могу сделать, чтобы решить эту проблему, пожалуйста? Почему картинка не отображается в панели 3? Благодарю.

Редактировать

Спасибо за вашу помощь :) Я решил проблему

+0

С какого события вы вызываете addPictureBox()? –

+0

Я вызываю addPictureBox() из события MouseUp – Clayton

+0

Вы знаете, как использовать отладчик? Было бы намного проще для вас самих и быстрее, если бы вы сначала попытались отладить эти вещи, прежде чем обращаться за помощью к stackoverflow. Stackoverflow - это когда вы не знаете, как что-то делать, или когда что-то происходит, что нелогично. Ваша проблема не в этом; ваша проблема просто в том, что вам нужно выполнить некоторую отладку. –

ответ

0

Попробуйте позвонить:

pNewImage.BringToFront(); 

После

panel3.Controls.Add(pNewImage); 
+0

Я попробовал, но снова ничего не появляется на панели. – Clayton

3

ИМХО Это не хорошая идея место коробки изображения - ее непрозрачность. Поэтому я предлагаю вам рисовать заметки вручную. Например:


Создать базовый класс Примечание:

public class Note 
{ 
    public Point Location { get; set; } 

    public virtual void Draw(Graphics g) 
    { 

    } 
} 

Создание заметок, позволяет говорить просто, сложно и картинка (которая рисует картину):

public class SimpleNote:Note 
{ 
    public SimpleNote(Point position) 
    { 
     Location = position; 
    } 

    public override void Draw(Graphics g) 
    { 
     g.FillEllipse(Brushes.Red, Location.X, Location.Y, 5, 5); 
     g.DrawLine(new Pen(Color.Red), Location.X+5, Location.Y, Location.X+5, Location.Y-15); 
    } 
} 

public class DifficultNote:Note 
{ 
    public DifficultNote(Point position) 
    { 
     Location = position; 
    } 

    public override void Draw(Graphics g) 
    { 
     SimpleNote left = new SimpleNote(Location); 
     SimpleNote right = new SimpleNote(new Point(Location.X + 20, Location.Y)); 

     left.Draw(g); 
     right.Draw(g); 
     g.DrawLine(new Pen(Color.Red), Location.X+5, Location.Y - 15, Location.X+25, Location.Y-15); 
    } 
} 

public class PictureNote:Note 
{ 
    private Image _image; 
    public PictureNote(Image image, Point position) 
    { 
     Location = new Point(position.X - image.Width/2, position.Y - image.Height/2); 
     _image = image; 
    } 

    public override void Draw(Graphics g) 
    { 
     g.DrawImage(_image, Location); 
    } 
} 

Добавить список заметок в категории Персонал и методы вызова в OnPai нт метод:

public List<Note> noteList = new List<Note>(); 
protected override void OnPaint(PaintEventArgs e) 
{ 
    int yPos = kOffset + staffIndex * kStaffSpacing; 
    for (int bars = 0; bars < 5; bars++) 
    { 
     e.Graphics.DrawLine(Pens.Black, 0, yPos, kStaffInPixels, yPos); 
     yPos += kBarSpacing; 
    } 

    foreach (var note in noteList) 
    { 
     note.Draw(e.Graphics); 
    } 
} 

и в панели персонала создают мыши обработчик события клика, например так:

private void staff1_MouseClick(object sender, MouseEventArgs e) 
{ 
    if(e.Button == MouseButtons.Left) 
     staff1.noteList.Add(new SimpleNote(new Point(e.X, e.Y))); 
    if(e.Button == MouseButtons.Right) 
     staff1.noteList.Add(new DifficultNote(new Point(e.X, e.Y))); 
    if(e.Button == MouseButtons.Middle) 
      staff1.noteList.Add(new PictureNote(new Bitmap("c:\\note.png"), new Point(e.X, e.Y))); 
     staff1.Invalidate(); 
} 

Результат (первый от картины, второй трудный и третий просто):

enter image description here

Ps код не самый лучший, я просто иллюстрирую свою идею.