» »

[c#] ukaz radirka

[c#] ukaz radirka

japol ::

Imam kodo za ukaz radirka:
public void MyMouseDown(Object sender, MouseEventArgs e)
        {
Graphics graphics = CreateGraphics();
int linh = System.Int32.Parse(textBox3.Text);
 
graphics.FillRectangle(new SolidBrush(Color.White), e.X, e.Y, linh, linh);
 
SelectRect.Width = 0;
SelectRect.Height = 0;
SelectRect.X = e.X;
SelectRect.Y = e.Y;
 
SelectRect.Width = linh;
SelectRect.Height = linh;
}
 

public void MyMouseMove(Object sender, MouseEventArgs e)
        {
Graphics graphics = CreateGraphics();
int linh = System.Int32.Parse(textBox3.Text);
 
graphics.FillRectangle(new SolidBrush(Color.White), e.X, e.Y,linh,linh);
 
SelectRect.Width = 0;
SelectRect.Height = 0;
SelectRect.X = e.X;
SelectRect.Y = e.Y;
 
SelectRect.Width = linh;
SelectRect.Height = linh;
 
Form thisform = (Form)sender;
ControlPaint.DrawReversibleFrame(thisform.RectangleToScreen(SelectRect), Color.Black, FrameStyle.Dashed);
}


Ampak to mi prikaže naslednje:
http://www63.zippyshare.com/v/17151299/...

Kako popravim kodo, da mi črtasti kvadratek prikazuje, vendar da mi ga ne riše. Podobno kot v MS Slikarju.

Arto ::

Če prav razumem kako to deluje, poskusi na začetku metode MyMouseMove še enkrat klicati
public void MyMouseMove(Object sender, MouseEventArgs e)
        {
//dodaj tole
ControlPaint.DrawReversibleFrame(thisform.RectangleToScreen(SelectRect), Color.Black, FrameStyle.Dashed);
Graphics graphics = CreateGraphics();
int linh = System.Int32.Parse(textBox3.Text);
  
graphics.FillRectangle(new SolidBrush(Color.White), e.X, e.Y,linh,linh);
  
SelectRect.Width = 0;
SelectRect.Height = 0;
SelectRect.X = e.X;
SelectRect.Y = e.Y;
  
SelectRect.Width = linh;
SelectRect.Height = linh;
  
Form thisform = (Form)sender;
ControlPaint.DrawReversibleFrame(thisform.RectangleToScreen(SelectRect), Color.Black, FrameStyle.Dashed);
}


A dela? :P

Zgodovina sprememb…

  • spremenil: Arto ()

japol ::

To sem že poskusil, deluje ampak kvradratek utripa. Trenutno poskušam z .MouseHover eventom, takoj ko uporabnik izbere ukaz radirka, da se prikaže kvadratek.
Dobrodošel je kakšen primer kode.

Arto ::

Meni je še tole malo sumljivo:
Graphics graphics = CreateGraphics();


Si ziher, da moraš to klicat vsakič ko se miška premakne, ali bi morda morala biti spremenljivka "graphics" globalna ali podana kot argument?

japol ::

V bistvu v tem primeru tega ne rabim.

Poskušal sem tudi nekaj takega:
            pictureBox4.MouseHover += new System.EventHandler(Risanje.risanje1_MiškaLebd);       

in
public void risanje1_MiškaLebd(Object sender, System.EventArgs e)
        {
           if (BrS == true)
           {
               Point p = f1.pictureBox4.PointToClient(Cursor.Position);
               int velRad = System.Int32.Parse(f1.toolStripTextBox2.Text);
               Rectangle oblRad = new Rectangle(p.X, p.Y, velRad, velRad);
               ControlPaint.DrawReversibleFrame(f1.pictureBox4.RectangleToScreen(oblRad), Color.Black, FrameStyle.Thick);     
           }   
        }

Vendar mi vstavi kvadrat v pictureBox4 in le enega. Mislim da nimam pravilno zastavljenega MouseHover eventa, drugi (MouseUp, MouseDown,...) delujejo. Ampak MouseHover pa ne more biti MouseEventArgs ampak EventArgs.

Še nisem našel pravilne rešitve. V bistvu potrebujem kvadratek, ki nakazuje kako velika je radirka med tem ko premikaš miško.

Zgodovina sprememb…

  • spremenil: japol ()

Monster ::

Kaj manjka MouseMove eventu?
Ka zaboga...

Arto ::

DrawReversableFrame morš dvakrat klicat, enkrat da ga zbriše pa enkrat da novga nariše. Če sem prav razumel dokumentacijo.

japol ::

V MouseMove eventu imam 2x napisano DrawReveribleFrame, pa ni v redu, je ok le ko tiščim tipko miške in hkrati vlečem ampak kvadratek brisalca mora biti viden takoj ko izbere ukaz za brisanje.

Zgodovina sprememb…

  • spremenil: japol ()

amacar ::

Najlažje ti je, da kvadratek za radirko rišeš v OnPaint metodi, ostalo pa na formo, bitmap karkoli že imaš.

Evo dejansko si to že spraševal v eni temi ( [c#] picturebox, slika na sliko ), pa ti zopet prilepim rešitev problema:

public partial class Form1 : Form
    {
        Bitmap bmp;
        Graphics gr;
        int x;
        int y;
        int x1;
        int y1;
        int velikost = 10;
        bool vmesnoRisanje = false;
        public Form1()
        {
            InitializeComponent();
            bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            pictureBox1.Image = bmp;
        }
 
        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            x = e.X;
            y = e.Y;
            vmesnoRisanje = true;
        }
 
        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            bmp = new Bitmap(pictureBox1.Image);
            gr = Graphics.FromImage(bmp);
            if (!checkBox1.Checked)
            {
                 
                gr.DrawLine(new Pen(new SolidBrush(Color.Black)), x, y, e.X, e.Y);
                vmesnoRisanje = false;
            }
            else
                gr.FillRectangle(new SolidBrush(Color.White), x1 - velikost / 2, y1 - velikost / 2, velikost, velikost);
            pictureBox1.Image = bmp;
        }
 
        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            x1 = e.X;
            y1 = e.Y;
            pictureBox1.Invalidate();
            if (e.Button == MouseButtons.Left && checkBox1.Checked)
            {
                bmp = new Bitmap(pictureBox1.Image);
                gr = Graphics.FromImage(bmp);
                gr.FillRectangle(new SolidBrush(Color.White), x1 - velikost / 2, y1 - velikost / 2, velikost, velikost);
                pictureBox1.Image = bmp;
            }
        }
 
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            if (vmesnoRisanje)
            {
                if (checkBox1.Checked)
                    e.Graphics.DrawRectangle(new Pen(new SolidBrush(Color.Red)), x1 - velikost / 2, y1 - velikost / 2, velikost, velikost);
                else
                    e.Graphics.DrawLine(new Pen(new SolidBrush(Color.Red)), x, y, x1, y1);
            }
        }
 
        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox1.Checked)
                vmesnoRisanje = true;
            else
                vmesnoRisanje=false;
        }
 
        private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            velikost = (int)numericUpDown1.Value;
        }
    }

Zgodovina sprememb…

  • spremenil: amacar ()

japol ::

Kako imaš napisan event za pictureBox1_Paint? pictureBox1.Paint += new PaintEventArgs....?
aha: pictureBox1.Paint += new PaintEventHandler(pictureBox1_Paint);

Zgodovina sprememb…

  • spremenil: japol ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

c# form

Oddelek: Programiranje
131861 (1375) FuI2cY
»

[c#] picturebox, slika na sliko

Oddelek: Programiranje
151084 (894) japol
»

[c#] Risanje z miško

Oddelek: Programiranje
221424 (1105) japol
»

video v c#

Oddelek: Programiranje
241535 (1075) boss-tech
»

vb.net barchart

Oddelek: Programiranje
81026 (948) rode

Več podobnih tem