Skip to main content
added 32 characters in body; edited tags
Source Link
Jamal
  • 35.2k
  • 13
  • 134
  • 238

MainWindow class:

public partial class MainWindow : Window
    {
        DrawCircle dc;
        DrawLine dl;
public MainWindow()
        {
            InitializeComponent();
        }

        private void cVas_MouseMove(object sender, MouseEventArgs e)
        {
                switch (rbLine.IsChecked)
                {
                    case true:
                        if (dl != null)
                            dl.MouseMove(Mouse.GetPosition(cVas));
                        break;
                    default:
                        if (dc != null)
                            dc.MouseMove(Mouse.GetPosition(cVas));
                        break;
                }
        }

        private void cVas_MouseDown(object sender, MouseButtonEventArgs e)
        {
            switch (rbLine.IsChecked)
            {
                case true:
                    dl = new DrawLine(this);
                    dl.MouseDown(Mouse.GetPosition(cVas));
                    break;
                default:
                    dc = new DrawCircle(this);
                    dc.MouseDown(Mouse.GetPosition(cVas));
                    break;
            }
         
        }

        private void cVas_MouseUp(object sender, MouseButtonEventArgs e)
        {
            dc = null;
            dl = null;
        }

        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
                cVas.Children.Clear();
        }
    }

and here is the DrawLine class (the DrawCircle is similar to this):MainWindow class:

class DrawLine
    {
        private Line myLine;
        MainWindow mw;

        public DrawLine(MainWindow mw)
        {
            this.mw = mw;
        }

        public void MouseDown(Point mousePoint)
        {
            myLine = new Line();
            myLine.Stroke = Brushes.Black;
            myLine.StrokeThickness = 2;
            myLine.X1 = myLine.X2 = mousePoint.X;
            myLine.Y1 = myLine.Y2 = mousePoint.Y;
            mw.cVas.Children.Add(myLine);
        }

        public void MouseUp()
        {
            myLine = null;
        }

        public void MouseMove(Point mousePoint)
        {
            if (myLine != null)
            {
                (mw.cVas.Children[mw.cVas.Children.IndexOf(myLine)] as Line).X2 = mousePoint.X;
                (mw.cVas.Children[mw.cVas.Children.IndexOf(myLine)] as Line).Y2 = mousePoint.Y;
            }
        }
    }
public partial class MainWindow : Window
    {
        DrawCircle dc;
        DrawLine dl;
public MainWindow()
        {
            InitializeComponent();
        }

        private void cVas_MouseMove(object sender, MouseEventArgs e)
        {
                switch (rbLine.IsChecked)
                {
                    case true:
                        if (dl != null)
                            dl.MouseMove(Mouse.GetPosition(cVas));
                        break;
                    default:
                        if (dc != null)
                            dc.MouseMove(Mouse.GetPosition(cVas));
                        break;
                }
        }

        private void cVas_MouseDown(object sender, MouseButtonEventArgs e)
        {
            switch (rbLine.IsChecked)
            {
                case true:
                    dl = new DrawLine(this);
                    dl.MouseDown(Mouse.GetPosition(cVas));
                    break;
                default:
                    dc = new DrawCircle(this);
                    dc.MouseDown(Mouse.GetPosition(cVas));
                    break;
            }
         
        }

        private void cVas_MouseUp(object sender, MouseButtonEventArgs e)
        {
            dc = null;
            dl = null;
        }

        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
                cVas.Children.Clear();
        }
    }

and the XAML, too:DrawLine class (the DrawCircle is similar to this):

<Window x:Class="WPFdraw.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" KeyDown="Window_KeyDown">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="20"></RowDefinition>
        </Grid.RowDefinitions>
        <Canvas Grid.Row="0" Background="Transparent" Name="cVas" Width="Auto" Height="Auto" MouseMove="cVas_MouseMove" MouseDown="cVas_MouseDown" MouseUp="cVas_MouseUp"></Canvas>
        <Grid Grid.Row="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition></ColumnDefinition>
                <ColumnDefinition></ColumnDefinition>
                <ColumnDefinition></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <RadioButton Grid.Column="0" GroupName="tool" IsChecked="True" Name="rbLine" VerticalAlignment="Center">Line</RadioButton>
            <RadioButton Grid.Column="1" GroupName="tool" Name="rbCircle" VerticalAlignment="Center">Circle</RadioButton>
            <Button Name="btn" Grid.Column="2" Content="klikk" ></Button>
        </Grid>
    </Grid>
</Window>
class DrawLine
    {
        private Line myLine;
        MainWindow mw;

        public DrawLine(MainWindow mw)
        {
            this.mw = mw;
        }

        public void MouseDown(Point mousePoint)
        {
            myLine = new Line();
            myLine.Stroke = Brushes.Black;
            myLine.StrokeThickness = 2;
            myLine.X1 = myLine.X2 = mousePoint.X;
            myLine.Y1 = myLine.Y2 = mousePoint.Y;
            mw.cVas.Children.Add(myLine);
        }

        public void MouseUp()
        {
            myLine = null;
        }

        public void MouseMove(Point mousePoint)
        {
            if (myLine != null)
            {
                (mw.cVas.Children[mw.cVas.Children.IndexOf(myLine)] as Line).X2 = mousePoint.X;
                (mw.cVas.Children[mw.cVas.Children.IndexOf(myLine)] as Line).Y2 = mousePoint.Y;
            }
        }
    }

Thanks for the answers!XAML:

<Window x:Class="WPFdraw.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" KeyDown="Window_KeyDown">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="20"></RowDefinition>
        </Grid.RowDefinitions>
        <Canvas Grid.Row="0" Background="Transparent" Name="cVas" Width="Auto" Height="Auto" MouseMove="cVas_MouseMove" MouseDown="cVas_MouseDown" MouseUp="cVas_MouseUp"></Canvas>
        <Grid Grid.Row="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition></ColumnDefinition>
                <ColumnDefinition></ColumnDefinition>
                <ColumnDefinition></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <RadioButton Grid.Column="0" GroupName="tool" IsChecked="True" Name="rbLine" VerticalAlignment="Center">Line</RadioButton>
            <RadioButton Grid.Column="1" GroupName="tool" Name="rbCircle" VerticalAlignment="Center">Circle</RadioButton>
            <Button Name="btn" Grid.Column="2" Content="klikk" ></Button>
        </Grid>
    </Grid>
</Window>

MainWindow class:

public partial class MainWindow : Window
    {
        DrawCircle dc;
        DrawLine dl;
public MainWindow()
        {
            InitializeComponent();
        }

        private void cVas_MouseMove(object sender, MouseEventArgs e)
        {
                switch (rbLine.IsChecked)
                {
                    case true:
                        if (dl != null)
                            dl.MouseMove(Mouse.GetPosition(cVas));
                        break;
                    default:
                        if (dc != null)
                            dc.MouseMove(Mouse.GetPosition(cVas));
                        break;
                }
        }

        private void cVas_MouseDown(object sender, MouseButtonEventArgs e)
        {
            switch (rbLine.IsChecked)
            {
                case true:
                    dl = new DrawLine(this);
                    dl.MouseDown(Mouse.GetPosition(cVas));
                    break;
                default:
                    dc = new DrawCircle(this);
                    dc.MouseDown(Mouse.GetPosition(cVas));
                    break;
            }
         
        }

        private void cVas_MouseUp(object sender, MouseButtonEventArgs e)
        {
            dc = null;
            dl = null;
        }

        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
                cVas.Children.Clear();
        }
    }

and here is the DrawLine class (the DrawCircle is similar to this):

class DrawLine
    {
        private Line myLine;
        MainWindow mw;

        public DrawLine(MainWindow mw)
        {
            this.mw = mw;
        }

        public void MouseDown(Point mousePoint)
        {
            myLine = new Line();
            myLine.Stroke = Brushes.Black;
            myLine.StrokeThickness = 2;
            myLine.X1 = myLine.X2 = mousePoint.X;
            myLine.Y1 = myLine.Y2 = mousePoint.Y;
            mw.cVas.Children.Add(myLine);
        }

        public void MouseUp()
        {
            myLine = null;
        }

        public void MouseMove(Point mousePoint)
        {
            if (myLine != null)
            {
                (mw.cVas.Children[mw.cVas.Children.IndexOf(myLine)] as Line).X2 = mousePoint.X;
                (mw.cVas.Children[mw.cVas.Children.IndexOf(myLine)] as Line).Y2 = mousePoint.Y;
            }
        }
    }

and the XAML, too:

<Window x:Class="WPFdraw.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" KeyDown="Window_KeyDown">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="20"></RowDefinition>
        </Grid.RowDefinitions>
        <Canvas Grid.Row="0" Background="Transparent" Name="cVas" Width="Auto" Height="Auto" MouseMove="cVas_MouseMove" MouseDown="cVas_MouseDown" MouseUp="cVas_MouseUp"></Canvas>
        <Grid Grid.Row="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition></ColumnDefinition>
                <ColumnDefinition></ColumnDefinition>
                <ColumnDefinition></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <RadioButton Grid.Column="0" GroupName="tool" IsChecked="True" Name="rbLine" VerticalAlignment="Center">Line</RadioButton>
            <RadioButton Grid.Column="1" GroupName="tool" Name="rbCircle" VerticalAlignment="Center">Circle</RadioButton>
            <Button Name="btn" Grid.Column="2" Content="klikk" ></Button>
        </Grid>
    </Grid>
</Window>

Thanks for the answers!

MainWindow class:

public partial class MainWindow : Window
    {
        DrawCircle dc;
        DrawLine dl;
public MainWindow()
        {
            InitializeComponent();
        }

        private void cVas_MouseMove(object sender, MouseEventArgs e)
        {
                switch (rbLine.IsChecked)
                {
                    case true:
                        if (dl != null)
                            dl.MouseMove(Mouse.GetPosition(cVas));
                        break;
                    default:
                        if (dc != null)
                            dc.MouseMove(Mouse.GetPosition(cVas));
                        break;
                }
        }

        private void cVas_MouseDown(object sender, MouseButtonEventArgs e)
        {
            switch (rbLine.IsChecked)
            {
                case true:
                    dl = new DrawLine(this);
                    dl.MouseDown(Mouse.GetPosition(cVas));
                    break;
                default:
                    dc = new DrawCircle(this);
                    dc.MouseDown(Mouse.GetPosition(cVas));
                    break;
            }
         
        }

        private void cVas_MouseUp(object sender, MouseButtonEventArgs e)
        {
            dc = null;
            dl = null;
        }

        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
                cVas.Children.Clear();
        }
    }

DrawLine class (the DrawCircle is similar to this):

class DrawLine
    {
        private Line myLine;
        MainWindow mw;

        public DrawLine(MainWindow mw)
        {
            this.mw = mw;
        }

        public void MouseDown(Point mousePoint)
        {
            myLine = new Line();
            myLine.Stroke = Brushes.Black;
            myLine.StrokeThickness = 2;
            myLine.X1 = myLine.X2 = mousePoint.X;
            myLine.Y1 = myLine.Y2 = mousePoint.Y;
            mw.cVas.Children.Add(myLine);
        }

        public void MouseUp()
        {
            myLine = null;
        }

        public void MouseMove(Point mousePoint)
        {
            if (myLine != null)
            {
                (mw.cVas.Children[mw.cVas.Children.IndexOf(myLine)] as Line).X2 = mousePoint.X;
                (mw.cVas.Children[mw.cVas.Children.IndexOf(myLine)] as Line).Y2 = mousePoint.Y;
            }
        }
    }

XAML:

<Window x:Class="WPFdraw.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" KeyDown="Window_KeyDown">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="20"></RowDefinition>
        </Grid.RowDefinitions>
        <Canvas Grid.Row="0" Background="Transparent" Name="cVas" Width="Auto" Height="Auto" MouseMove="cVas_MouseMove" MouseDown="cVas_MouseDown" MouseUp="cVas_MouseUp"></Canvas>
        <Grid Grid.Row="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition></ColumnDefinition>
                <ColumnDefinition></ColumnDefinition>
                <ColumnDefinition></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <RadioButton Grid.Column="0" GroupName="tool" IsChecked="True" Name="rbLine" VerticalAlignment="Center">Line</RadioButton>
            <RadioButton Grid.Column="1" GroupName="tool" Name="rbCircle" VerticalAlignment="Center">Circle</RadioButton>
            <Button Name="btn" Grid.Column="2" Content="klikk" ></Button>
        </Grid>
    </Grid>
</Window>
Source Link
mitya221
  • 803
  • 6
  • 11
  • 14

WPF circle and line drawer solution

I've created a WPF program which can draw lines and circles on a canvas. It works well, but I don't think it's the best solution. How can I make it work better? How would you create this program?

MainWindow class:

public partial class MainWindow : Window
    {
        DrawCircle dc;
        DrawLine dl;
public MainWindow()
        {
            InitializeComponent();
        }

        private void cVas_MouseMove(object sender, MouseEventArgs e)
        {
                switch (rbLine.IsChecked)
                {
                    case true:
                        if (dl != null)
                            dl.MouseMove(Mouse.GetPosition(cVas));
                        break;
                    default:
                        if (dc != null)
                            dc.MouseMove(Mouse.GetPosition(cVas));
                        break;
                }
        }

        private void cVas_MouseDown(object sender, MouseButtonEventArgs e)
        {
            switch (rbLine.IsChecked)
            {
                case true:
                    dl = new DrawLine(this);
                    dl.MouseDown(Mouse.GetPosition(cVas));
                    break;
                default:
                    dc = new DrawCircle(this);
                    dc.MouseDown(Mouse.GetPosition(cVas));
                    break;
            }
         
        }

        private void cVas_MouseUp(object sender, MouseButtonEventArgs e)
        {
            dc = null;
            dl = null;
        }

        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
                cVas.Children.Clear();
        }
    }

and here is the DrawLine class (the DrawCircle is similar to this):

class DrawLine
    {
        private Line myLine;
        MainWindow mw;

        public DrawLine(MainWindow mw)
        {
            this.mw = mw;
        }

        public void MouseDown(Point mousePoint)
        {
            myLine = new Line();
            myLine.Stroke = Brushes.Black;
            myLine.StrokeThickness = 2;
            myLine.X1 = myLine.X2 = mousePoint.X;
            myLine.Y1 = myLine.Y2 = mousePoint.Y;
            mw.cVas.Children.Add(myLine);
        }

        public void MouseUp()
        {
            myLine = null;
        }

        public void MouseMove(Point mousePoint)
        {
            if (myLine != null)
            {
                (mw.cVas.Children[mw.cVas.Children.IndexOf(myLine)] as Line).X2 = mousePoint.X;
                (mw.cVas.Children[mw.cVas.Children.IndexOf(myLine)] as Line).Y2 = mousePoint.Y;
            }
        }
    }

and the XAML, too:

<Window x:Class="WPFdraw.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" KeyDown="Window_KeyDown">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="20"></RowDefinition>
        </Grid.RowDefinitions>
        <Canvas Grid.Row="0" Background="Transparent" Name="cVas" Width="Auto" Height="Auto" MouseMove="cVas_MouseMove" MouseDown="cVas_MouseDown" MouseUp="cVas_MouseUp"></Canvas>
        <Grid Grid.Row="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition></ColumnDefinition>
                <ColumnDefinition></ColumnDefinition>
                <ColumnDefinition></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <RadioButton Grid.Column="0" GroupName="tool" IsChecked="True" Name="rbLine" VerticalAlignment="Center">Line</RadioButton>
            <RadioButton Grid.Column="1" GroupName="tool" Name="rbCircle" VerticalAlignment="Center">Circle</RadioButton>
            <Button Name="btn" Grid.Column="2" Content="klikk" ></Button>
        </Grid>
    </Grid>
</Window>

Thanks for the answers!