2015-01-04 23 views
0

pictureBox1我正在上窗口的應用程序的應用程序構成。它被稱爲artgenerator。繪圖更然後1個圖形與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

另一件事。因爲我的尺寸和圖形位置都是隨機的,所以它們都會從屏幕上消失(半分)。這是可以修復的還是這個隨機性的一部分?

在此先感謝

順便說一下我在編程初學者

+0

'那不是我want' ** **做你想要什麼?如果不知道這一點,很難提供解決方案。 – Plutonix

+0

您正在設置新的但不重置舊的圖形類型。另外:閱讀Enum !! – TaW

+1

考慮使用帶'switch()'語句的'enum'而不是 – ja72

回答

2

更改您的if語句這樣:

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

謝謝你給我帶來了一些東西。現在,因爲該另一件事:) 我得到一個正方形,如果我點擊橢圓(後ofcourse我按下方)。因此,它看起來像他們一定到其他按鈕,一旦他們被點擊 感謝儘管 –

+0

回覆設置布爾爲false,一旦他們被吸引 – Sievajet

+0

你們隊長明顯。 感謝的人:) 任何想法的關於保持在PictureBox的顯卡?由於隨機的X和Y位置,它遍佈整個地方(必須是隨機的),但最好不要掉到屏幕外。或者當你使用隨機工具時,這樣的事情是不可行的? –

1

這是不完全清楚你希望發生的事情,因爲每個按鈕是什麼按下。如果它是一次一個,我們使用RadioButtons的簡單方法。將外觀設置爲「按鈕」,它們將像切換按鈕一樣 - 直到另一個按鈕被按下。此外,每次只能按一個,聽起來像你想要的。

然後跟蹤繪製其形狀:

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的值繪製正確的形狀。使用3個變量來跟蹤一個圖像狀態通常會導致混淆。

+0

感謝您的回覆 即使效果更好,我也無法使用單選按鈕。我在編程課,他們希望我做這個與按鈕:( 任何想法與X和Y位置?圖形不會脫落的屏幕或是不可容忍的,因爲隨機? –

+0

收音機按鈕不是按鈕,它甚至看起來就像使用「外觀」屬性在屏幕上一樣 – Plutonix

+0

哦,我從工具選項中得不到太多東西,我從學校那裏得到一份描述這個任務的文章,他們說必須使用「按鈕」,我們從來沒有使用單選按鈕 感謝您的答覆艱難 –