Winforms, как сделать фон элемента прозрачным, если он размещен в веб-браузере?

Я начинающий. Проблема в следующем: Даже если для BackColor установлено значение «веб-прозрачный», он действительно не прозрачен для некоторых элементов, таких как веб-браузер. Похоже, применен цвет материнского элемента. Есть ли способ сделать его полностью прозрачным? Или, может быть, мне нужно использовать какой-то другой элемент в этом случае? Мне просто нужно показать текст и иметь возможность накачивать его мышью.

Хорошего дня!

Было бы неплохо, если бы установка BackColor на прозрачность повлияла на него «человеческим пониманием»)

Сделайте родителя прозрачным.

CorrieJanse 16.02.2023 02:24

У меня не работает, к сожалению.

Arsenii Chechun 17.02.2023 17:04

Спасибо за ваш первый пост и спасибо за голосование! Однако очень редко кто-либо может воспроизвести вашу проблему или предложить решение, не видя 1 вашего кода и 2 точно не зная, в чем проблема. Поэтому, пожалуйста, прежде чем публиковать свой отдельный дополнительный вопрос об изменениях шрифта, бегло просмотрите stackoverflow.com/help/how-to-ask, который поможет нам помочь вам. ИМО, оба вопроса приличные, но из-за отсутствия 1 и 2 за этот вопрос проголосовали (почти закрыли). Многие люди здесь могут помочь, но им нужно точно знать, что вы пробовали и в каком порядке!

IVSoftware 17.02.2023 22:55

Спасибо! буду следовать инструкции!)

Arsenii Chechun 18.02.2023 13:16
Конечные и Readonly классы в PHP
Конечные и Readonly классы в PHP
В прошлом, когда вы не хотели, чтобы другие классы расширяли определенный класс, вы могли пометить его как final.
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
БЭМ: Конвенция об именовании CSS
БЭМ: Конвенция об именовании CSS
Я часто вижу беспорядочный код CSS, особенно если проект большой. Кроме того, я совершал эту ошибку в профессиональных или личных проектах и...
Революционная веб-разработка ServiceNow
Революционная веб-разработка ServiceNow
В быстро развивающемся мире веб-разработки ServiceNow для достижения успеха крайне важно оставаться на вершине последних тенденций и технологий. По...
Как добавить SEO(Search Engine Optimization) в наше веб-приложение и как это работает?
Как добавить SEO(Search Engine Optimization) в наше веб-приложение и как это работает?
Заголовок веб-страницы играет наиболее важную роль в SEO, он помогает поисковой системе понять, о чем ваш сайт.
Конфигурация Jest в angular
Конфигурация Jest в angular
В этой статье я рассказываю обо всех необходимых шагах, которые нужно выполнить при настройке jest в angular.
1
4
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы правы в том, что причина, по которой элемент управления 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, который вы можете клонировать и экспериментировать с ним.

Спасибо! Очень интересный способ сделать объект прозрачным)) Но мне нравится!)

Arsenii Chechun 17.02.2023 17:05

Ну... Мне также нужно изменить шрифт текста. Но после замены не работает(

Arsenii Chechun 17.02.2023 18:17

Это также не работает, если я пытаюсь вызвать его не в момент инициализации ((

Arsenii Chechun 17.02.2023 18:27

Все в порядке! вы можете не торопиться.

Arsenii Chechun 17.02.2023 18:28

Мне также интересно, пробовали ли вы пример кода в моем репо. Несмотря на то, что это не относится к изменению шрифта конкретно, наличие клона на вашем устройстве облегчит исправление. В любом случае, мы все уладим! Спасибо за ваше терпение.

IVSoftware 17.02.2023 18:29

Нет, но я просто скопировал этот код. Как я вижу, это то же самое, что вы пишете в своем репо. Поскольку я больше не вижу кода, связанного с моей проблемой в вашем репо. Я ошибаюсь?

Arsenii Chechun 17.02.2023 18:34

Это нормально, если вы скопировали его из репозитория, если вы взяли класс DragHelper и можете перетаскивать label element, и он выделяет и меняет цвет.

IVSoftware 17.02.2023 21:50

Я использую другой способ перемещения метки. Влияет ли это на прозрачность? В настоящее время проблема заключается в следующем: «Если я перенесу код, который вы представили здесь, в событие button_click, он не сработает». Теперь я собираюсь изучить ваш репозиторий.

Arsenii Chechun 18.02.2023 13:17

Такой же. Если я воспользуюсь вашим репозиторием и просто перенесу код из main в button_click, это не сработает. Я думаю, что это главная проблема сейчас. скриншот

Arsenii Chechun 18.02.2023 13:34

Хорошо, я просто должен спросить об этом, потому что вы описали себя как новичка: вы знакомы с процессом «клонирования репо», да? Дело в том, что код репо работает, так что вы его клонировали или копировали код из него?

IVSoftware 18.02.2023 16:32

Хотя совет тот же. Мы определенно подошли к тому моменту, когда нам нужно увидеть ваш код, чтобы что-то диагностировать. Итак, действительно, пожалуйста, подумайте о том, чтобы задать новый вопрос и показать, что вы пробовали до сих пор.

IVSoftware 18.02.2023 16:33

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

Arsenii Chechun 18.02.2023 22:01

Нужно ли мне создавать абсолютно новый вопрос?

Arsenii Chechun 18.02.2023 22:01

Правильно ли я понимаю, что это работает в клонированном решении, но не работает после того, как вы переместите этот код в свой?

IVSoftware 18.02.2023 23:12

Мне просто нужно как-то увидеть ваш код. Либо в новом вопросе, либо если у вас есть учетная запись GitHub, я бы хотел посмотреть ваше репо, если вы хотите ее создать. Это два наших варианта.

IVSoftware 18.02.2023 23:29

Нет. Ваш код находится в общедоступном методе MainForm(). Это означает, что он будет выполнен один раз при запуске формы. Но как заставить его выполнять этот код, когда я нажимаю кнопку? Если просто нажать cntrl+x на этот код, а затем нажать cntrl+v на метод button_click, он не сработает. Вы можете видеть, как я модифицирую ваш код на скриншоте, который я отправил ранее. !пример со скриншотом Мой код почти такой же. Хорошо, я создам новый вопрос. Большое спасибо!)

Arsenii Chechun 20.02.2023 12:27

Другие вопросы по теме