2015-01-04 22 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

哦,我从工具选项中得不到太多东西,我从学校那里得到一份描述这个任务的文章,他们说必须使用“按钮”,我们从来没有使用单选按钮 感谢您的答复艰难 –