공부/Devexpress

[Devexpress Winform, c#] XtraMessageBox 버튼 텍스트 변경하기

복제고양이 2025. 1. 14. 23:16
300x250

Devexpress에서 기본 제공하는 버튼은 기본 영어로 나온다. 

버튼의 글자를 변경하기 위해 직접 접근할 수는 없지만

XtraMessageBoxArgs를 매개변수로 하는 show 함수를 이용해 

showing 이벤트에서 버튼의 텍스트를 바꿔치기 할 수 있다.

다국어를 위한 리소스 등을 이용해서 적용할 수도 있다.

 

public static class CustomXtraMessageBox
{
    static XtraMessageBoxArgs getArgs(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon)
    {
        XtraMessageBoxArgs args = new XtraMessageBoxArgs();
        args.Showing += Args_Showing;
        args.Caption = caption;
        args.Text = text;
        args.Icon = _getIcon(icon);
        args.Buttons = buttons switch
        {
            MessageBoxButtons.OK => new DialogResult[] { DialogResult.OK },
            MessageBoxButtons.YesNo => new DialogResult[] { DialogResult.Yes, DialogResult.No },
            MessageBoxButtons.YesNoCancel => new DialogResult[] { DialogResult.Yes, DialogResult.No, DialogResult.Cancel },
            _ => new DialogResult[] { DialogResult.OK } // default case
        };

        void Args_Showing(object sender, XtraMessageShowingArgs e)
        {
            bool _hasDR(DialogResult dr) => e.Buttons[dr] is not null;
            void _setBtnText(DialogResult dr, string text)
            {
                if (_hasDR(dr))
                    e.Buttons[dr].Text = text;
            }
            
            //원하는 버튼의 텍스트를 설정하거나 다국어 처리한다.
            _setBtnText(DialogResult.OK, "확인");
            _setBtnText(DialogResult.Cancel, "취소");
            _setBtnText(DialogResult.Yes, "예");
            _setBtnText(DialogResult.No, "아니오");
        }

        return args;
    }
    // Method to convert MessageBoxIcon to System.Drawing.Icon
    private static Icon _getIcon(MessageBoxIcon messageBoxIcon)
    {
        switch (messageBoxIcon)
        {
            case MessageBoxIcon.Information:
            //case MessageBoxIcon.Asterisk: // Both have the same value (64)
                return SystemIcons.Information;
            case MessageBoxIcon.Warning:
            //case MessageBoxIcon.Exclamation:// Both have the same value (48)
                return SystemIcons.Warning;
            case MessageBoxIcon.Error:
                return SystemIcons.Error;
            case MessageBoxIcon.Question:
                return SystemIcons.Question;
            default:
                return SystemIcons.Information; // Default to Information icon
        }
    }


    public static DialogResult ShowCustom(string text, string caption = null)
    {
    	//버튼은 ok하나, 아이콘은 에러를 사용한다고 가정.
        var args = getArgs(text, caption, MessageBoxButtons.OK, MessageBoxIcon.Error);
        return XtraMessageBox.Show(args);
    }
 }
반응형