Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
ToBeOrNotToBe
0 / 0 / 0
Регистрация: 07.01.2017
Сообщений: 22
1

Переместить метку на панель так, чтобы её было видно

01.12.2017, 23:38. Просмотров 768. Ответов 5
Метки нет (Все метки)

Добрый вечер. Подскажите, пожалуйста, как решить данную проблему: при переносе метки на панель она "исчезает" (делается невидимой, попадает под панель?). Как это исправить?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2017, 23:38
Ответы с готовыми решениями:

Закрасить кнопку так, чтобы не было видно ее бордюров
Меняю цвет у кнопки через BackColor, но результат не устраивается. Цвет ложится...

чтобы было видно только какую то определенную часть картинки в pictureBox
Всем привет. Подскажите как сделать, чтобы было видно только какую то...

Как сделать так, чтобы можно было выводить текст в форме
1. Как сделать так, чтобы можно было выводить текст в форме ? Например, как в...

Как сделать так чтобы можно было ввести только дату?
Вот основная форма: Вот форма при нажатии на кнопку "Добавить": Так вот...

Как сделать так, чтобы в фокусе было 2 и более кнопки одновременно
На форме находятся три groupBox в каждом по 3 кнопки. Смысл такой, я нажимаю...

5
ViterAlex
6822 / 3797 / 1552
Регистрация: 11.02.2013
Сообщений: 8,344
Завершенные тесты: 3
01.12.2017, 23:49 2
Покажи как переносишь метку на панель
0
ToBeOrNotToBe
0 / 0 / 0
Регистрация: 07.01.2017
Сообщений: 22
02.12.2017, 01:28  [ТС] 3
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace DRAGDROP
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            this.label1.Parent = panel1;
            this.label2.Parent = panel1;
            this.label3.Parent = panel1;
            this.label4.Parent = panel2;
            this.label5.Parent = panel2;
            this.label6.Parent = panel2;
            this.label7.Parent = panel3;
            this.label8.Parent = panel3;
            this.label9.Parent = panel3;
            this.label10.Parent = panel4;
            this.label11.Parent = panel4;
            this.label12.Parent = panel4;
            panel1.AllowDrop = panel2.AllowDrop = panel3.AllowDrop = panel4.AllowDrop = true;
        }
 
        private void label1_MouseDown(object sender, MouseEventArgs e)
        {
            {
                if (e.Button == MouseButtons.Left)
                    DoDragDrop(sender, DragDropEffects.Move);
            }
        }
 
        private void label_Move(Label lb, Panel pl)
        {
            lb.Parent = pl;
        }
 
        private void panel1_DragDrop(object sender, DragEventArgs e)
        {
            Label lb = e.Data.GetData(typeof(Label)) as Label;
            Panel pl = sender as Panel;
            lb.Location = PointToClient(new Point(e.X, e.Y));
            label_Move(lb, pl);
        }
 
        private void panel1_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Move;
        }
    }
}
У меня 4 панели, на каждой - по 3 метки. Перетаскивать можно только в пределах своей панели или с панели на панель. Обработчики у меня только для 1 панели и 1 метки. остальные "прикреплены" к данным обработчикам по аналогии. Для 1 панели всё работает нормально, в её пределах переносятся метки, за пределы нет, но метки других панелей исчезают при попытке, также исчезают метки 1 формы, если их перенести на другие.
0
ViterAlex
6822 / 3797 / 1552
Регистрация: 11.02.2013
Сообщений: 8,344
Завершенные тесты: 3
02.12.2017, 09:14 4
Лучший ответ Сообщение было отмечено ToBeOrNotToBe как решение

Решение

Ошибка в вызове метода PointToClient. Метод ведь не статический, поэтому, вызывая его таким образом, ты считаешь клиентские координаты относительно формы, а нужно считать относительно панели, на которую перемещаешь метку. Т.е.:
C#
1
lb.Location = pl.PointToClient(new Point(e.X, e.Y));
1
ToBeOrNotToBe
0 / 0 / 0
Регистрация: 07.01.2017
Сообщений: 22
02.12.2017, 10:59  [ТС] 5
Добавлено через 4 минуты
ViterAlex, Спасибо, стало лучше, но теперь, когда я пытаюсь перетащить метку с панели на панель, она перетаскивается на нужное место, но в пределах панели, на которой находится. Как это пофиксить?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApp2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void label1_MouseDown(object sender, MouseEventArgs e)
        {
            {
                if (e.Button == MouseButtons.Left)
                    DoDragDrop(sender, DragDropEffects.Move);
            }
        }
 
        private void panel1_DragDrop(object sender, DragEventArgs e)
        {
            Label lb = e.Data.GetData(typeof(Label)) as Label;
            Panel pl = sender as Panel;
            lb.Location = pl.PointToClient(new Point(e.X, e.Y));
        }
 
        private void panel1_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Move;
        }
    }
}
0
ToBeOrNotToBe
0 / 0 / 0
Регистрация: 07.01.2017
Сообщений: 22
05.12.2017, 18:28  [ТС] 6
Прошу прощения, неверно изменила код. Ваша версия рабочая, спасибо, вопрос закрыт!
0
05.12.2017, 18:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2017, 18:28

Как сделать так, чтобы можно было закрыть только текущую Форму?
Доброго времени суток. Я использую Windows Forms и язык C# для написания не...

Как заполнить listBox так, чтобы можно было вытащить два элемента
Здравствуйте подскажите, как заполнить listBox так, что бы можно было вытащить...

Как сделать так чтобы можно было кликать по кнопке только 1 раз в день?
Хаи. Описал проблему уже в заголовке. Мне нужно чтобы button1 был активен,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru