Я начинающий. Проблема в следующем: Даже если для BackColor установлено значение «веб-прозрачный», он действительно не прозрачен для некоторых элементов, таких как веб-браузер. Похоже, применен цвет материнского элемента. Есть ли способ сделать его полностью прозрачным? Или, может быть, мне нужно использовать какой-то другой элемент в этом случае? Мне просто нужно показать текст и иметь возможность накачивать его мышью.
Хорошего дня!
Было бы неплохо, если бы установка BackColor на прозрачность повлияла на него «человеческим пониманием»)
У меня не работает, к сожалению.
Спасибо за ваш первый пост и спасибо за голосование! Однако очень редко кто-либо может воспроизвести вашу проблему или предложить решение, не видя 1 вашего кода и 2 точно не зная, в чем проблема. Поэтому, пожалуйста, прежде чем публиковать свой отдельный дополнительный вопрос об изменениях шрифта, бегло просмотрите stackoverflow.com/help/how-to-ask, который поможет нам помочь вам. ИМО, оба вопроса приличные, но из-за отсутствия 1 и 2 за этот вопрос проголосовали (почти закрыли). Многие люди здесь могут помочь, но им нужно точно знать, что вы пробовали и в каком порядке!
Спасибо! буду следовать инструкции!)
Вы правы в том, что причина, по которой элемент управления WinForms кажется прозрачным, заключается в том, что «фон прозрачного элемента управления Windows Forms рисуется его родителем», как объясняется в документации MS . Это означает, что фон родительского элемента управления будет отображаться в метке, даже если между ними есть другой элемент управления (вы упомянули веб-браузер).
Решение состоит в том, чтобы изменить форму самого элемента управления Label, назначив рисуемый элемент Region, исключающий прозрачные пиксели.
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
// Change shape of Label control, removing transparent pixels.
label1.BackColor = Color.Transparent;
Bitmap bitmap = new Bitmap(label1.Width, label1.Height);
label1.DrawToBitmap(bitmap, label1.ClientRectangle);
Region region = new Region(label1.ClientRectangle);
for (int x = 0; x < label1.Width; x++) for (int y = 0; y < label1.Height; y++)
{
if (bitmap.GetPixel(x, y).A == 0)
{
region.Exclude(new Rectangle(x, y, 1, 1));
}
}
label1.Region = region;
}
}
Вы говорите, что хотите перетащить его, поэтому имейте в виду, что элемент управления, закодированный таким образом, обнаружит щелчок мыши только по области элемента управления, которая все еще существует, а именно по тексту. Но вот пример решения для прозрачного перетаскиваемого элемента Label, который вы можете клонировать и экспериментировать с ним.
Спасибо! Очень интересный способ сделать объект прозрачным)) Но мне нравится!)
Ну... Мне также нужно изменить шрифт текста. Но после замены не работает(
Это также не работает, если я пытаюсь вызвать его не в момент инициализации ((
Все в порядке! вы можете не торопиться.
Мне также интересно, пробовали ли вы пример кода в моем репо. Несмотря на то, что это не относится к изменению шрифта конкретно, наличие клона на вашем устройстве облегчит исправление. В любом случае, мы все уладим! Спасибо за ваше терпение.
Нет, но я просто скопировал этот код. Как я вижу, это то же самое, что вы пишете в своем репо. Поскольку я больше не вижу кода, связанного с моей проблемой в вашем репо. Я ошибаюсь?
Это нормально, если вы скопировали его из репозитория, если вы взяли класс DragHelper и можете перетаскивать label element, и он выделяет и меняет цвет.
Я использую другой способ перемещения метки. Влияет ли это на прозрачность? В настоящее время проблема заключается в следующем: «Если я перенесу код, который вы представили здесь, в событие button_click, он не сработает». Теперь я собираюсь изучить ваш репозиторий.
Такой же. Если я воспользуюсь вашим репозиторием и просто перенесу код из main в button_click, это не сработает. Я думаю, что это главная проблема сейчас. скриншот
Хорошо, я просто должен спросить об этом, потому что вы описали себя как новичка: вы знакомы с процессом «клонирования репо», да? Дело в том, что код репо работает, так что вы его клонировали или копировали код из него?
Хотя совет тот же. Мы определенно подошли к тому моменту, когда нам нужно увидеть ваш код, чтобы что-то диагностировать. Итак, действительно, пожалуйста, подумайте о том, чтобы задать новый вопрос и показать, что вы пробовали до сих пор.
Я клонирую ваше репо. Затем я перемещаю код, который делает метку прозрачной, в событие, которое вызывается при нажатии кнопки, и в этом случае он больше не работает.
Нужно ли мне создавать абсолютно новый вопрос?
Правильно ли я понимаю, что это работает в клонированном решении, но не работает после того, как вы переместите этот код в свой?
Мне просто нужно как-то увидеть ваш код. Либо в новом вопросе, либо если у вас есть учетная запись GitHub, я бы хотел посмотреть ваше репо, если вы хотите ее создать. Это два наших варианта.
Нет. Ваш код находится в общедоступном методе MainForm(). Это означает, что он будет выполнен один раз при запуске формы. Но как заставить его выполнять этот код, когда я нажимаю кнопку? Если просто нажать cntrl+x на этот код, а затем нажать cntrl+v на метод button_click, он не сработает. Вы можете видеть, как я модифицирую ваш код на скриншоте, который я отправил ранее. !пример со скриншотом Мой код почти такой же. Хорошо, я создам новый вопрос. Большое спасибо!)
Сделайте родителя прозрачным.