Forum » Programiranje » [c#] ukaz radirka
[c#] ukaz radirka
japol ::
Imam kodo za ukaz radirka:
  
 
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.
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
  
 
A dela?
 
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?
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.
Dobrodošel je kakšen primer kode.
Arto ::
Meni je še tole malo sumljivo:
  
 
Si ziher, da moraš to klicat vsakič ko se miška premakne, ali bi morda morala biti spremenljivka "graphics" globalna ali podana kot argument?
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:
  
in
  
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.
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 ()
 
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:
 
  
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);
aha: pictureBox1.Paint += new PaintEventHandler(pictureBox1_Paint);
Zgodovina sprememb…
- spremenil: japol ()
 
Vredno ogleda ...
| Tema | Ogledi | Zadnje sporočilo | |
|---|---|---|---|
| Tema | Ogledi | Zadnje sporočilo | |
| » | c# formOddelek: Programiranje | 2016 (1530) | FuI2cY | 
| » | [c#] picturebox, slika na slikoOddelek: Programiranje | 1210 (1020) | japol | 
| » | [c#] Risanje z miškoOddelek: Programiranje | 1533 (1214) | japol | 
| » | video v c#Oddelek: Programiranje | 1637 (1177) | boss-tech | 
| » | vb.net barchartOddelek: Programiranje | 1214 (1136) | rode |