티스토리 뷰
MessageBox의 버튼 텍스트 변경하기
기본 메시지박스의 텍스트를 변경할 수 있다.
데브피아 C#마을 조동현님께서 올리신 팁입니다.
개인 라이브러리에 추가해서 유용하게 잘 사용하고 있습니다.
아래 내용을 참고하면 아래와 같은 메세지 박스를 생성할 수 있습니다.
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
public class MessageBoxEx
{
delegate int HookProc(int code, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr SetWindowsHookEx(int hook, HookProc callback, IntPtr hMod, uint dwThreadId);
[DllImport("user32.dll")]
static extern bool UnhookWindowsHookEx(IntPtr hhk);
[DllImport("user32.dll")]
static extern int CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll")]
static extern IntPtr GetDlgItem(IntPtr hDlg, DialogResult nIDDlgItem);
[DllImport("user32.dll")]
static extern bool SetDlgItemText(IntPtr hDlg, DialogResult nIDDlgItem, string lpString);
[DllImport("kernel32.dll")]
static extern uint GetCurrentThreadId();
static IntPtr g_hHook;
static string yes;
static string cancel;
static string no;
/// <summary>
/// 메시지 박스를 띠웁니다.
/// </summary>
/// <param name="text">텍스트 입니다.</param>
/// <param name="caption">캡션 입니다.</param>
/// <param name="yes">예 문자열 입니다.</param>
/// <param name="no">아니오 문자열 입니다.</param>
/// <param name="cancel">취소 문자열 입니다.</param>
/// <returns></returns>
public static DialogResult Show(string text, string caption, string yes, string no, string cancel)
{
MessageBoxEx.yes = yes;
MessageBoxEx.cancel = cancel;
MessageBoxEx.no = no;
g_hHook = SetWindowsHookEx(5, new HookProc(HookWndProc), IntPtr.Zero, GetCurrentThreadId());
return MessageBox.Show(text, caption, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
}
static int HookWndProc(int nCode, IntPtr wParam, IntPtr lParam)
{
IntPtr hChildWnd;
if (nCode == 5)
{
hChildWnd = wParam;
if (GetDlgItem(hChildWnd, DialogResult.Yes) != null)
SetDlgItemText(hChildWnd, DialogResult.Yes, MessageBoxEx.yes);
if (GetDlgItem(hChildWnd, DialogResult.No) != null)
SetDlgItemText(hChildWnd, DialogResult.No, MessageBoxEx.no);
if (GetDlgItem(hChildWnd, DialogResult.Cancel) != null)
SetDlgItemText(hChildWnd, DialogResult.Cancel, MessageBoxEx.cancel);
UnhookWindowsHookEx(g_hHook);
}
else
CallNextHookEx(g_hHook, nCode, wParam, lParam);
return 0;
}
}
엄청난 DllImport와 static이지요...
ex)
MessageBoxEx.Show("정지 하시겠습니까?", "정지", "야스", "노노", "취소닷!");
'프로그래밍 > .NetFramework' 카테고리의 다른 글
문자열확인 정규표현식 유효성 Regex (0) | 2012.04.25 |
---|---|
Server에서 Microsoft.Interop.Excel.dll 설정 (0) | 2012.04.25 |
C# 엑셀 오토메이션, 엑셀 서식, 테두리, 색상, 셀 넓이 ( interop.excel.dll ) (2) | 2012.04.23 |
WorkBook 을 이용해서 GridView 엑셀로 내려받기 (0) | 2012.04.23 |
EXCEL2010(엑셀2010) 읽기 Workbook 이용 (엑셀읽기) (0) | 2012.04.13 |
- Total
- Today
- Yesterday
- WebApi
- JavaScript
- 저장프로시저
- IE
- ASP.NET
- jquery chart
- html5
- WCF
- jQuery Mobile
- grid
- Style
- 제이쿼리
- rowspan
- drag&drop
- 셀렉터
- Excel
- CSS
- css3
- Chart
- 자바스크립트
- MSSQL
- radius
- workbook
- Mobile
- json
- SVG
- jQuery
- 프로시저
- Ajax
- JS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |