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 |