Как затушевывать формуляры, не касаясь контроля, который этот содержит?

Я создаю персонализированное меню. Но когда я помещаю свойство opacity в формуляре, весь контроль, которые этот содержит также, рессеивается.

Как делать для того, чтобы свойства, которые меняются в формуляре, не коснулись контроля, который этот содержит?

introducir la descripción de la imagen aquí

5
задан 18.11.2016, 01:16
3 ответа

Этот вопрос казался мне очень интригующим, никогда он это не заметил, что в WindowsForms, у матовости только есть она Form и что получает в наследство ее в контроль, который в ней он содержит (она мне кажется очень большой ошибкой со стороны, как справляется это) даже в MSDN на Form. Opacity говорит:

Opacity свойство позволяет ему определять уровень прозрачности формуляра и Вашего контроля.

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

Вышеупомянутое решение находится в этой теме в StackOverflow на английском:

Идея состоит в том, чтобы создавать два Form, один, где ты изменишь свойство Opactity, другой, где менять себе свойство TransparencyKey(здесь я оставляю информацию об этом контроле). Первый будет тем, который прозрачности и второго, будет содержать контроль и будет тем, который проконтролирует движение двух Forms.

FormOpacity

Это будет Форм Васио, что ты только изменишь ему propidad Opacity, в Design или в коде, кроме того инстанции FormControles:

public FormOpacity()
{
    InitializeComponent();
    Opacity = 0.5;
    FormControles f = new FormControles(this);
    f.Show();
}

FormControles

Здесь у тебя, должно быть, есть весь твой контроль, должно быть, будь того же размера другого form, ты используешь TransparencyKey, чтобы делать прозрачным фон и ты создашь событие Move, для того, чтобы он всегда был назад FormOpacity.

public Form1(Form backForm)
{
    InitializeComponent();
    this.backForm = backForm;
    TransparencyKey = Color.FromArgb(255, 240, 240, 240); //color del Form
}

private Form backForm; //Variable para guardar el FormOpacity

private void Form1_Move(object sender, EventArgs e)
{
    backForm.Location = Location;
}

Здесь тогда поскольку он остался бы.

Aquí está el resultado

В конце концов это было лучшее решение, которое я нашел, так как я попробовал encrustar Form внутри Другого, посмотрим он добивался того же эффекта, но с единственным окном, но я не имел успеха.

В конце концов, как я говорю тебе, правда, этот выбор мне не понравился, так как у него есть много проблем, как которые у тебя есть два окна, и да ты приуменьшаешь FormOpacity уже ты не получаешь желанный эффект (Если ты приуменьшаешь FormControles да, приуменьшаются две), но я жду подайте тебя немного и помогите с твоей проблемой. Для меня это было бы решено способствуя тому, чтобы у каждого контроля было Ваше свойство Opacity, но хороший, это уже не зависит от нас.

0
ответ дан 24.11.2019, 12:38
  • 1
    Привет Рэндалл. Я даю тебе вознаграждение, потому что 1) OP когда бы то ни было volvió в сайт, чтобы принимать ответ 2), Хотя ты сами распознаешь, что твой solució n у него есть Ваши недостатки, это ú nica ответ, которым более или менее удается манипулировать opacity. Возможно который с большим количеством времени и я усиливаю, что твой solució n смогите быть улучшенным, но точка - что dejastes основание, которое возможно могло бы помогать кому-то решать эту проблему. Спасибо. – sstan 22.11.2016, 03:15
  • 2
    Большое спасибо @sstan, просвет я tambié n noté что OP не volvió в сайт. Большое спасибо, я tambié n я надеюсь, что это может служить для будущих людей, которые считали бы проблему этим и которые могли бы улучшать мой solució n и до того, чтобы иметь ее. – Randall Sandoval 22.11.2016, 15:45

Ему возможно удаваться определяя BackColor из определенного цвета и этого же самого цвета применять это как TransparencyKey , это внутри строителя нашего класса, который он увеличивает Form:

    public Form1()
    {
        InitializeComponent();
        ...
        ...

        this.TransparencyKey = Color.Green;
        this.BackColor = Color.Green;
    }

С этим lograrГ-схвати то, что ты желаешь, прозрачный формуляр, но они не контролируй, что он содержит :

introducir la descripción de la imagen aquí

То же самое в VB.NET, инициализировали, мы определяем те же цвета:

  Private Sub InitializeComponent()
        ...
        ...
        Me.TransparencyKey = Color.Green
        Me.BackColor = Color.Green
  End Sub

и мы получаем:

introducir la descripción de la imagen aquí

Менять свойство Opacity не функционирует в этом случае, добавьте ответ ранее, где возможно видеть.

3
ответ дан 24.11.2019, 12:38

Это способ делать это полностью прозрачным (меняя цвет ты можешь выбирать другие тоны):

public class TransparentPanel : Panel
{
    protected override CreateParams CreateParams 
    {            
        get {
            CreateParams cp =  base.CreateParams;
            cp.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT
            return cp;
            }
    }
    protected override void OnPaintBackground(PaintEventArgs e) 
    {
        //base.OnPaintBackground(e);
    }
}

, Скопированный этого post форума в inglГ©s: https://stackoverflow.com / questions / 4463363/how-can-i-set-the-opacity-or-transparency-of-a-panel-in-winforms

0
ответ дан 24.11.2019, 12:38

Теги

Похожие вопросы