2013-06-27 2 views
0

У меня есть этот кодКак я могу перейти к элементу управления Windows?

private void picturebox1_Paint(object sender, PaintEventArgs e) 
    { 
     if (Percent == 100) 
     { 
      e.Graphics.DrawString("Completed!", font, Brushes.Black, new Point(3, 2)); 
     } 
    } 

И я хочу, чтобы ориентироваться, если здесь:

public void Complete() 
{ 
    picRooms_Paint();//How can I reach picRooms_Paint from here and draw the string? 
} 

Любая помощь будет оценен по достоинству!

+0

Почему вы не устанавливаете 'Text' вместо этого? если вы не хотите какой-то пользовательской рисованной строки. Кстати, что такое 'picRooms'? pictureBox? –

+0

Что вы, вероятно, хотите сделать, это недействительность picRooms, чтобы инициировать событие Paint. Я думаю, что это что-то вроде picRooms.Invalidate(); –

+1

Как эти методы реализованы? Являются ли они в одном классе? Кроме того, ваш метод, вызывающий 'picRooms_Paint()' **, не будет работать ** в приведенном выше примере. Первоначально вы передавали ему два перегруженных «отправителя объекта», PaintEventArgs e' и не следовали тому же шаблону во втором методе. – Brian

ответ

0

Непонятно из вашего примера, что такое picRooms, поэтому я не могу рассказать вам, как получить доступ к его графике из других источников.

Хотя в качестве общего улучшения API было бы лучше перевести функциональный код из обработчика события в метод, в котором его можно было бы использовать ;

private void DrawComplete(Graphics g) 
{ 
    if (Percent == 100) 
    { 
     g.DrawString("Completed!", font, Brushes.Black, new Point(3, 2)); 
    } 
} 

И теперь вы можете назвать этот метод из любого места;

private void picRooms_Paint(object sender, PaintEventArgs e) 
{ 
    DrawComplete(e.Graphics) 
} 

public void Complete() 
{ 
    DrawComplete(this.CreateGraphics()); 
} 

Также стоит ничего, что в вашем примере, так как Complete не делает ничего другого, вы можете также следовать этому примеру, но поставить функциональный код в Complete, не добавить еще один метод, как я есть.

+0

Удивительная идея, тогда я могу просто загрузить графику в окно изображения! Большое спасибо! – Emalton

+0

Я думаю, вы обнаружите, что это сложнее, когда вы входите в него; PictureBox может просто перерисовываться, когда форма окрашивается, в зависимости от того, какой другой код у вас есть. –

+0

У меня возникли проблемы с загрузкой графики в графический ящик. Я хочу, чтобы он продолжал пытаться, пока процент не достигнет 100, если это возможно. – Emalton