2013-11-25 5 views
3

Можно ли вызвать статический метод MessageBox класса Show() так, чтобы у него не было значка на панели задач или у него было настроенное изображение? Я пытаюсь найти альтернативу созданию пользовательского класса MessageBox.Скрыть значок панели задач .NET MessageBox

Спасибо.

Я попытался к DefaultDesktopOnly в опции следующим образом:

if (MessageBox.Show("Are you sure you would like to do something?", "Title", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly) == DialogResult.Yes) 
{ 
    //Do stuff 
} 

Однако есть еще значок на панели задач, а также основной формой начали врезаться, а также. Я в Win7, если это имеет значение. Существуют ли проблемы стабильности с DefaultDesktopOnly?

+1

Может ли MessageBoxIcon.None быть жизнеспособным вариантом? http://msdn.microsoft.com/en-us/library/365dky5y(v=vs.110).aspx – OnoSendai

+1

@OnoSendai К сожалению, это только устанавливает значок в фактическом окне сообщений. – kmarks2

+1

Недавно я столкнулся с подобной проблемой, и создание собственного пользовательского класса оказалось намного менее сложным, чем настройка класса MessageBox ... – Arie

ответ

2

Невозможно.

Функциональность MessageBox предоставляется нам как есть. Некоторые элементы настраиваются, некоторые - нет. В сети есть альтернативы. Зайдите в CodeProject, у них их несколько.

+0

Хотя верно, что MessageBox «как есть» без возможности дальнейшей настройки за пределами заданных параметров, этот конкретный случай возможен, просто давая ему владельца. – Alejandro

+0

Да, будучи запечатанным и статическим, это то, что я понял. Это был длинный выстрел, но я подумал, что спрошу. Да, я уже создал замену, которая отлично работает. – kmarks2

1

Использование командной MessageBoxOptions Enum

MessageBoxOptions.DefaultDesktopOnly 
+2

Вы уверены, что [это вариант, который он ищет] (http://msdn.microsoft.com/en-us/library/system.windows.forms.messageboxoptions (v = vs.110) .aspx) (Кстати, он добрый побочного эффекта этого варианта, но он не сделан для этого, и он будет нести многие другие недостатки). Это то, что он хочет? –

+1

Я не могу предоставить альтернативу в это время, но это действительно работает, посмотрим на альтернативы – liquidsnake786

7

Вы должны дать окно владельца MessageBox, который имеет (или нет) икону самого по себе для диалога, чтобы не показывать на своем собственном. Если вы вызываете MessageBox с открытой формы, вы можете передать форму в качестве первого параметра, чтобы сделать его своим владелец:

// Assume "this" is a form, not valid from any other class 
if (MessageBox.Show(this, "Are you sure you would like to do something?", "Title", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly) == DialogResult.Yes) 
{ 
    //Do stuff 
} 

Но если ваша программа не имеет никакого другого GUI видимого в данный момент, вы можете просто создать фиктивная форма только для того, чтобы предоставить ее владельцу, например:

// A new, invisible form is created as the MessageBox owner, this prevents it from appearing in the taskbar 
if (MessageBox.Show(new Form(), "Are you sure you would like to do something?", "Title", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly) == DialogResult.Yes) 
{ 
    //Do stuff 
} 
Смежные вопросы