How to prevent two labels created in run-time from intersecting with each other? (C# WPF)












1















I have a canvas, which, upon a click on the left button of the mouse, has a label created on it in the clicking point. This is the xaml code:



public partial class MainWindow : Window
{
int num = 1;
List <Label> countries = new List<Label>();
public MainWindow()
{
InitializeComponent();
}

private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var point = Mouse.GetPosition(Canvas);
Label label = new Label() { Width = 100, Height = 100 };
Canvas.Children.Add(label);
Canvas.SetLeft(label, point.X);
Canvas.SetTop(label, point.Y);
label.Focus();
num++;
countries.Add(label);
}
}


I would like to make it so two different labels would not be able to intersect with each other. The idea is that if the user tries to create a label in a location which would cause it to intersect with another existing label, a message box would pop and tell him to choose another location.



Unfortunately I did not succeed in implementing this. If anyone could help, I would be very glad.
Help will be much appreciated :)










share|improve this question



























    1















    I have a canvas, which, upon a click on the left button of the mouse, has a label created on it in the clicking point. This is the xaml code:



    public partial class MainWindow : Window
    {
    int num = 1;
    List <Label> countries = new List<Label>();
    public MainWindow()
    {
    InitializeComponent();
    }

    private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
    var point = Mouse.GetPosition(Canvas);
    Label label = new Label() { Width = 100, Height = 100 };
    Canvas.Children.Add(label);
    Canvas.SetLeft(label, point.X);
    Canvas.SetTop(label, point.Y);
    label.Focus();
    num++;
    countries.Add(label);
    }
    }


    I would like to make it so two different labels would not be able to intersect with each other. The idea is that if the user tries to create a label in a location which would cause it to intersect with another existing label, a message box would pop and tell him to choose another location.



    Unfortunately I did not succeed in implementing this. If anyone could help, I would be very glad.
    Help will be much appreciated :)










    share|improve this question

























      1












      1








      1








      I have a canvas, which, upon a click on the left button of the mouse, has a label created on it in the clicking point. This is the xaml code:



      public partial class MainWindow : Window
      {
      int num = 1;
      List <Label> countries = new List<Label>();
      public MainWindow()
      {
      InitializeComponent();
      }

      private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
      {
      var point = Mouse.GetPosition(Canvas);
      Label label = new Label() { Width = 100, Height = 100 };
      Canvas.Children.Add(label);
      Canvas.SetLeft(label, point.X);
      Canvas.SetTop(label, point.Y);
      label.Focus();
      num++;
      countries.Add(label);
      }
      }


      I would like to make it so two different labels would not be able to intersect with each other. The idea is that if the user tries to create a label in a location which would cause it to intersect with another existing label, a message box would pop and tell him to choose another location.



      Unfortunately I did not succeed in implementing this. If anyone could help, I would be very glad.
      Help will be much appreciated :)










      share|improve this question














      I have a canvas, which, upon a click on the left button of the mouse, has a label created on it in the clicking point. This is the xaml code:



      public partial class MainWindow : Window
      {
      int num = 1;
      List <Label> countries = new List<Label>();
      public MainWindow()
      {
      InitializeComponent();
      }

      private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
      {
      var point = Mouse.GetPosition(Canvas);
      Label label = new Label() { Width = 100, Height = 100 };
      Canvas.Children.Add(label);
      Canvas.SetLeft(label, point.X);
      Canvas.SetTop(label, point.Y);
      label.Focus();
      num++;
      countries.Add(label);
      }
      }


      I would like to make it so two different labels would not be able to intersect with each other. The idea is that if the user tries to create a label in a location which would cause it to intersect with another existing label, a message box would pop and tell him to choose another location.



      Unfortunately I did not succeed in implementing this. If anyone could help, I would be very glad.
      Help will be much appreciated :)







      c# wpf xaml user-interface label






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 12 '18 at 15:03









      BlablaBlabla

      334




      334
























          1 Answer
          1






          active

          oldest

          votes


















          0














          Try this:



           private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
          {
          var point = Mouse.GetPosition(canvas);
          Rect newrect = new Rect(point.X, point.Y, 100, 100);
          Boolean isIntersects = false;
          foreach (Control control in canvas.Children)
          {
          if (control is Label)
          {
          Rect oldrect = new Rect(Canvas.GetLeft(control), Canvas.GetTop(control), control.Width, control.Height);
          if (newrect.IntersectsWith(oldrect))
          {
          MessageBox.Show("Oops. Intersecting...");
          isIntersects = true;
          break;
          }
          }
          }
          if (isIntersects == false)
          {
          Label label = new Label() { Width = 100, Height = 100 };
          label.Content = "This is a label:)";
          label.Background = new SolidColorBrush(Colors.Yellow);
          canvas.Children.Add(label);
          Canvas.SetLeft(label, point.X);
          Canvas.SetTop(label, point.Y);
          }
          }





          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53264880%2fhow-to-prevent-two-labels-created-in-run-time-from-intersecting-with-each-other%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            Try this:



             private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
            var point = Mouse.GetPosition(canvas);
            Rect newrect = new Rect(point.X, point.Y, 100, 100);
            Boolean isIntersects = false;
            foreach (Control control in canvas.Children)
            {
            if (control is Label)
            {
            Rect oldrect = new Rect(Canvas.GetLeft(control), Canvas.GetTop(control), control.Width, control.Height);
            if (newrect.IntersectsWith(oldrect))
            {
            MessageBox.Show("Oops. Intersecting...");
            isIntersects = true;
            break;
            }
            }
            }
            if (isIntersects == false)
            {
            Label label = new Label() { Width = 100, Height = 100 };
            label.Content = "This is a label:)";
            label.Background = new SolidColorBrush(Colors.Yellow);
            canvas.Children.Add(label);
            Canvas.SetLeft(label, point.X);
            Canvas.SetTop(label, point.Y);
            }
            }





            share|improve this answer




























              0














              Try this:



               private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
              {
              var point = Mouse.GetPosition(canvas);
              Rect newrect = new Rect(point.X, point.Y, 100, 100);
              Boolean isIntersects = false;
              foreach (Control control in canvas.Children)
              {
              if (control is Label)
              {
              Rect oldrect = new Rect(Canvas.GetLeft(control), Canvas.GetTop(control), control.Width, control.Height);
              if (newrect.IntersectsWith(oldrect))
              {
              MessageBox.Show("Oops. Intersecting...");
              isIntersects = true;
              break;
              }
              }
              }
              if (isIntersects == false)
              {
              Label label = new Label() { Width = 100, Height = 100 };
              label.Content = "This is a label:)";
              label.Background = new SolidColorBrush(Colors.Yellow);
              canvas.Children.Add(label);
              Canvas.SetLeft(label, point.X);
              Canvas.SetTop(label, point.Y);
              }
              }





              share|improve this answer


























                0












                0








                0







                Try this:



                 private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
                {
                var point = Mouse.GetPosition(canvas);
                Rect newrect = new Rect(point.X, point.Y, 100, 100);
                Boolean isIntersects = false;
                foreach (Control control in canvas.Children)
                {
                if (control is Label)
                {
                Rect oldrect = new Rect(Canvas.GetLeft(control), Canvas.GetTop(control), control.Width, control.Height);
                if (newrect.IntersectsWith(oldrect))
                {
                MessageBox.Show("Oops. Intersecting...");
                isIntersects = true;
                break;
                }
                }
                }
                if (isIntersects == false)
                {
                Label label = new Label() { Width = 100, Height = 100 };
                label.Content = "This is a label:)";
                label.Background = new SolidColorBrush(Colors.Yellow);
                canvas.Children.Add(label);
                Canvas.SetLeft(label, point.X);
                Canvas.SetTop(label, point.Y);
                }
                }





                share|improve this answer













                Try this:



                 private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
                {
                var point = Mouse.GetPosition(canvas);
                Rect newrect = new Rect(point.X, point.Y, 100, 100);
                Boolean isIntersects = false;
                foreach (Control control in canvas.Children)
                {
                if (control is Label)
                {
                Rect oldrect = new Rect(Canvas.GetLeft(control), Canvas.GetTop(control), control.Width, control.Height);
                if (newrect.IntersectsWith(oldrect))
                {
                MessageBox.Show("Oops. Intersecting...");
                isIntersects = true;
                break;
                }
                }
                }
                if (isIntersects == false)
                {
                Label label = new Label() { Width = 100, Height = 100 };
                label.Content = "This is a label:)";
                label.Background = new SolidColorBrush(Colors.Yellow);
                canvas.Children.Add(label);
                Canvas.SetLeft(label, point.X);
                Canvas.SetTop(label, point.Y);
                }
                }






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 13 '18 at 22:38









                HYAHYA

                413




                413






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53264880%2fhow-to-prevent-two-labels-created-in-run-time-from-intersecting-with-each-other%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Full-time equivalent

                    Bicuculline

                    さくらももこ