Я пытаюсь открыть окно автоматического закрытия предупреждений, которое появляется под определенным элементом управления, который неправильно используется пользователем.Окно предупреждения/предупреждения не появится в месте управления
В настоящее время я использую механизм DevExpress AlertControl
. Его расположение должно быть установлено с помощью BeforeFormShow
события, поэтому я использую следующий класс менеджера, чтобы установить свое местоположение и показать предупреждение с конкретным сообщением:
class AlertPopper
{
private AlertControl _alert;
private Form _form;
private int _x, _y;
/// Pass in an AlertControl to be managed by the AlertPopper.
public AlertPopper(Form form, AlertControl alert)
{
_form = form;
_alert = alert;
_x = _y = 0;
_alert.BeforeFormShow += SetAlertLocation;
}
private void SetAlertLocation(object sender, AlertFormEventArgs e)
{
e.Location = new System.Drawing.Point(_x, _y);
}
public void DisplayAlert(int x, int y, string message)
{
_x = x;
_y = y;
var alertInfo = new AlertInfo("Warning", message);
_alert.Show(_form, alertInfo);
}
public void DisplayAlert(Control control, string message)
{
DisplayAlert(control.Location.X, control.Location.Y, message);
}
}
намерения состоит в том, чтобы поймать исключение и отображать предупреждение при соответствующий контроль, как это:
// In form constructor, start the alert manager:
public MyForm()
{
_alertPopper = new AlertPopper(this, this.AlertWarning);
}
// ... then in some event handler method, display the alert:
private void SomeControl_Click(Control sender, EventArgs e)
{
// ... in some catch block for a recoverable exception
_alertPopper.DisplayAlert(sender, "Bad thing happened.");
}
но вместо оповещения окно появляется под контролем, оказывается далеко (часто на неправильном отображении двух моих монитора установлен, но не здесь):
Похоже, что координаты обрабатываются относительно моего экрана, а не моего окна. Как я могу получить предупреждение для отображения относительно последнего?
Ну что работал отлично. Спасибо за чистое решение! – kdbanman