2015-01-04 4 views
0

Я делаю приложение на приложении форм Windows. Он называется артгенератором.Рисование более 1 графики на pictureBox1 с button_Click + смешение графики

Смысл этого приложения заключается в том, что каждый раз, когда я нажимаю кнопку, например кнопку «эллипс», эллипс будет нарисован на форме. Теперь все идет гладко, пока я не нажимаю все три кнопки после друг друга. Затем приложение объединяет все цифры в 1. И это не то, что я хочу. Также после того, как я нарисую 1 эллипс, квадрат или линию, и снова нажмите одну и ту же кнопку, и графический дисплей исчезнет, ​​и появится новая. Как исправить эти проблемы?

Я пошлю мой код внизу:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace Kunstgenerator 
{ 

    public partial class Form1 : Form 
    { 
     bool TekenCirkel = false; 
     bool TekenRechthoek = false; 
     bool TekenLijn = false; 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button4_Click(object sender, EventArgs e) 
     { 
      pictureBox1.Hide(); 
     } 

     private void btnCirkel_Click(object sender, EventArgs e) 
     { 
      TekenCirkel = true; 
      pictureBox1.Show(); 
      pictureBox1.Refresh(); 
     } 

     private void btnRechthoek_Click(object sender, EventArgs e) 
     { 
      TekenRechthoek = true; 
      pictureBox1.Show(); 
      pictureBox1.Refresh(); 
     } 

     private void btnLijn_Click(object sender, EventArgs e) 
     { 
      TekenLijn = true; 
      pictureBox1.Refresh(); 
      pictureBox1.Show(); 
     } 

     private void pictureBox1_Resize(object sender, EventArgs e) 
     { 
      Refresh(); 
     } 

     private void pictureBox1_Paint(object sender, PaintEventArgs e) 
     { 
       // Er wordt een Random aangemaakt. 
       Random random = new Random(); 

       // Breedte en hoogte wordt aangemaakt en verwezen naar zichzelf. 
       // Hier wordt de Random gebruikt om een willekeurige hoogte en breedte te maken. 
       int width = random.Next(this.Width); 
       int height = random.Next(this.Height); 

       // Primaire kleuren Rood, Geel, Blauw worden hier aangemaakt. 
       // Door de Random is de kleuren willekeurig. Er wordt een kleur uitgekozen tussen 1 en 255 
       int r = random.Next(255); 
       int g = random.Next(255); 
       int b = random.Next(255); 

      if (TekenRechthoek) 
      { 
       Graphics graphics = e.Graphics; 
       if (random.Next(2) == 0) 
       { 
        graphics.FillRectangle(new SolidBrush(Color.FromArgb(r, g, b)), width, height, width, height); 
       } 
       else 
       { 
        graphics.DrawRectangle(new Pen(new SolidBrush(Color.FromArgb(r, g, b))), width, height, width, height); 
       } 

      } 
      if (TekenLijn) 
      { 
       Graphics graphics = e.Graphics; 
       graphics.DrawLine(new Pen(new SolidBrush(Color.FromArgb(r, g, b))), width, height, width, 100); 
      } 

      if (TekenCirkel) 
      { 
       Graphics graphics = e.Graphics; 

       if (random.Next(2) == 0) 
       { 
        graphics.FillEllipse(new SolidBrush(Color.FromArgb(r, g, b)), width, height, width, height); 
       } 
       else 
       { 
        graphics.DrawEllipse(new Pen(new SolidBrush(Color.FromArgb(r, g, b))), width, height, width, height); 
       } 
      } 
      }   
     } 
    } 

Это весь код. Я также привел здесь фотографию, чтобы показать вам, что я имею в виду, комбинируя графику.

enter image description here

одна вещь. Поскольку мой размер и расположение графики являются случайными, все они исчезают (полу-иш) с экрана. Это исправление или эта часть случайности?

Заранее спасибо

Btw Я новичок в программировании

+0

'это не то, что я хочу', что ** делать ** вы хотите? трудно предложить решение, не зная об этом. – Plutonix

+0

Вы устанавливаете новый, но не перезагружаете старые графические типы. Также: читайте на Enum !! – TaW

+1

Рассмотрите возможность использования 'enum' с оператором' switch() ' – ja72

ответ

2

Изменить ваш, если заявление на это:

if (TekenRechthoek) 
{ 
} 
else if (TekenLijn) 
{ 
} 
else if (TekenCirkel) 
{ 
} 
+0

Спасибо, что принес мне немного. Теперь еще одна вещь :) из-за этого я получаю квадрат, если я нажимаю на эллипс (конечно, после того, как я нажал квадрат). Таким образом, похоже, что они привязаны к другой кнопке, как только они были нажаты. спасибо за ответ, хотя –

+0

Установите логические значения в false, как только они нарисованы – Sievajet

+0

Вы, капитан, очевидны. Спасибо man :) Любая идея о сохранении графики на картинке? из-за случайного положения X и Y он повсюду (должен быть случайным), но предпочтительнее не выпадать из экрана. Или что-то вроде этого невозмутимо, когда вы работаете с рандомами? –

1

Это не совсем понятно, что вы хотите, чтобы это произошло, поскольку каждая кнопка нажат. Если это по одному, мы можем легко использовать RadioButtons. Установите внешний вид на «Button», и они будут действовать как кнопки переключения - они остаются нажатыми до тех пор, пока не будет нажата другая. Кроме того, только один может быть нажат в то время, которое звучит так, как вы хотите.

Затем, чтобы отслеживать, какую форму рисовать:

private enum Shapes 
{ 
    Circle, 
    Line, 
    Rect 
} 

// current shape var with default val 
private Shapes thisShape = Shapes.Circle; 

Тогда просто установить текущую форму для втягивания каждой проверки измененного события:

private void rbCircle_CheckedChanged(object sender, EventArgs e) 
{ 
    if (rbCircle.Checked) { 
     thisShape = Shapes.Circle; 
    } 
} 

При нажатии на другую кнопку, он получит установлен на этот индикатор формы. Затем нарисуйте правильную форму на основе значения thisShape. Использование трех переменных для отслеживания состояния одного изображения обычно приводит к путанице.

+0

Спасибо за ответ Я не могу использовать переключатель, даже если это лучше. Я нахожусь в классе программирования, и они хотят, чтобы я делал это с помощью кнопок :( любая идея с позицией X и Y? Что графика не упадет с экрана или это невозбудимо из-за случайного? –

+0

радиостанция не является КНОПКОЙ? Он даже будет выглядеть так же, как на экране, используя свойство «Внешний вид». – Plutonix

+0

oh Я не знаю, что многое из опции инструментов. Я получил статью из школы, в которой описывается назначение. «кнопка», и мы никогда не пользовались радиокнопкой спасибо за ответ –