改变油漆颜色

时间:2016-11-17 12:47:54

标签: c# winforms

我编写了一个程序,允许用户在表格中用笔绘画。 但有一个问题。

我只能在表格中设置2种颜色,例如我为左按钮设置了黑色,为右按钮设置了红色。

我需要的一切是如何将此代码更改为用户可以选择自己的颜色的代码。

我尝试过不同的方式,比如Color Dialogue,但我做不到。

我的代码:

//Basic Directive
<script>
  Vue.directive('foo', {
    bind(el, binding, vnode) {
      setTimeout(() => {
        //vnode.context.$emit('bar'); <- this will trigger in parent
        vnode.$emit('bar');
      }, 3000);
    }
  });
</script>


//Basic Component
<template>
  <button v-foo @bar="change">{{label}}</button>
</template>
<script>
  export default{
    data() {
      return {
        label: 'i dont work'
      }
    },
    methods: {
      change() {
        this.label = 'I DO WORK!';
      }
    }
  }
</script>

3 个答案:

答案 0 :(得分:1)

使用一些对话框为鼠标左键和右键选择一种颜色,并将其存储在类级变量中,即

if (_leftPen != null) { _leftPen.Dispose(); }
_leftPen = new Pen(selectedColour, 1f);

请注意,1fPen的厚度,可以根据您的要求进行更改。

然后在您的绘图方法中使用_leftPen。然后只需对鼠标右键应用类似的逻辑,即_rightPen。然后你有:

private Pen _leftPen = Pens.Black;
private Pen _rightPen = Pens.Red;

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Left)
    {
        Graphics graphic = this.CreateGraphics();
        graphic.DrawLine(_leftPen, e.X, e.Y, e.X + 1, e.Y + 1);
    }

    if (e.Button == System.Windows.Forms.MouseButtons.Right)
    {
        Graphics graphic = this.CreateGraphics();
        graphic.DrawLine(_rightPen, e.X, e.Y, e.X + 1, e.Y + 1);
    }
}

您需要做的就是找到一种让用户选择自己颜色的方法。

还要注意@Taw的评论:

  

Winforms图形基本规则#1:永远不要使用control.CreateGraphics!永远不要尝试缓存Graphics对象!使用Graphics g = Graphics.FromImage(bmp)或在控件的Paint事件中使用e.Graphics参数绘制到Bitmap bmp中。系统需要绘制所有控件&#39;表面有时你无法控制;因此,您要添加到这些曲面的所有内容都必须从系统将调用的一个事件创建,即Paint事件。

您应该在Paint事件中使用您的代码,在MouseMove事件中,您应该存储要绘制的行的位置,然后稍后更新。

private Pen _leftPen = Pens.Black;
private Pen _rightPen = Pens.Red;

private List<Point> _leftPoints = new List<Point>();
private List<Point> _rightPoints = new List<Point>();

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Left)
    {
        _leftPoints.Add(new Point(e.X, e.Y));
    }

    if (e.Button == System.Windows.Forms.MouseButtons.Right)
    {
        _rightPoints.Add(new Point(e.X, e.Y));
    }

    this.Invalidate();
}

private void Form1_Paint(object sender, PaintEventArgs e)
{
    foreach (Point point in _leftPoints)
    {
        e.Graphics.DrawLine(_leftPen, point.X, point.Y, point.X + 1, point.Y + 1);
    }

    //Similar code for _rightPoints here
}

请注意,对Invalidate的调用会强制表单重新绘制自己。如果适用,您可以改为使用this.Refresh()this.Update()

答案 1 :(得分:1)

java

然后获取用户颜色并设置Color BackColor = Color.Black; Color ForeColor = Color.Red; Backcolor

Forecolor

答案 2 :(得分:0)

您可以使用以下内容:

using System;
using System.Drawing;
using System.Windows.Forms;

public partial class Form1 : Form
{
    private readonly Graphics graphics;

    public Form1()
    {
        InitializeComponent();

        this.graphics = this.CreateGraphics();

        this.Load += (s, e) =>
        {
            foreach (var color in Enum.GetValues(typeof(KnownColor)))
                this.UserColors.Items.Add(color);
        };
    }

    /// <summary>
    /// Painting (left button use changed color, right-white to erase)
    /// </summary>
    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
            this.graphics.DrawLine(
                new Pen(
                    Color.FromKnownColor(
                        (KnownColor)Enum.Parse(typeof(KnownColor),
                        this.UserColors.SelectedItem.ToString()))),
                e.X,
                e.Y,
                e.X + 1,
                e.Y + 1);

        if (e.Button == MouseButtons.Right)
            this.graphics.DrawLine(
                Pens.White,
                e.X,
                e.Y,
                e.X + 1,
                e.Y + 1);
    }
}

this.UserColors是主窗口上的ComboBox。