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 | 1861 (1375) | FuI2cY |
» | [c#] picturebox, slika na slikoOddelek: Programiranje | 1084 (894) | japol |
» | [c#] Risanje z miškoOddelek: Programiranje | 1424 (1105) | japol |
» | video v c#Oddelek: Programiranje | 1535 (1075) | boss-tech |
» | vb.net barchartOddelek: Programiranje | 1026 (948) | rode |