본문 바로가기
공부/Devexpress

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

by 복제고양이 2025. 1. 14.
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);
    }
 }
반응형