2017-01-24 4 views
0

VB.Net에서 MsgBox() 함수에 내장 된 것을 오버로드하고 싶습니다.내장 된 vb.net 함수에 오버로드하는 방법

MsgBox가 팝업 될 때마다 삐 소리를 내고 싶지만, 예를 들어 MsgBoxWithBeep()과 같이 새 기능을 만들지 않고 기존 코드에서 찾기/바꾸기를 전체적으로 수행합니다.

나는 모듈 내에이 잘 수행 할 수 있습니다

Public Sub MsgBox(msg As String) 
    Beep() 
    MsgBox(msg) 
End Sub 

그러나 물론이 무한 재귀 루프 될 수있을 테니까요.

MyBase.MsgBox()은 수업이 아니므로 할 수 없습니다.

모든 기본 제공 함수가 사용하는 가정 클래스가 있습니까? VbNetBaseClass.MsgBox() 또는 원래 함수로 돌아가는 다른 방법이 있습니까?

+1

는 이러한 여러 가지가 있습니다를,있는 MsgBox는 Microsoft.VisualBasic.Interaction''에서 유래하지만 모듈이 아닌 클래스입니다. 그러나 오버로드는 다른 서명을 부여하는 것을 의미합니다. 이것은 컴파일러가 호출 할 버전을 알기 위해서 필요합니다. "새로운"MsgBox 메소드는 문제가되는 표준 서명 (여러 개의 선택적 매개 변수가 있음)에 맞습니다. 가장 쉬운 방법은 래퍼를 작성하는 것입니다. – Plutonix

+0

@Plutonix : 그게 효과가 있습니다! 'Microsoft.VisualBasic.Interaction.MsgBox()'에 앞서 MessageBox()를 넣는 유일한 방법은 붙박이 전자음입니다. –

답변

2

간단한 해결책은있는 MsgBox이 같은 MessageBox.Show 전화를 사용하는 것입니다 :

Public Sub MsgBox(msg As String) 
    Beep() 
    MessageBox.Show(msg, Me.Text, MessageBoxButtons.OK) 
End Sub 
당신이 함수의 경우에 그것을 만들 수 있습니다 ... 블랙 우드에서 좋은 점 :

Public Sub MsgBox(msg As String) 
    MessageBox.Show(msg, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) 
End Sub 

_

편집 :

또는 더 나은 아직, 이미 경고음을 느낌표/오류 아이콘을 사용하여 당신이 결과 필요

Public Function MsgBox(msg As String, _ 
         Optional title As String = "", _ 
         Optional msgButtons As MessageBoxButtons = MessageBoxButtons.OK, _ 
         Optional msgIcon As MessageBoxIcon = MessageBoxIcon.None) _ 
        As System.Windows.Forms.DialogResult 
    Return MessageBox.Show(msg, title, msgButtons, msgIcon) 
End Function 
+2

'MsgBox'는'MsgBoxResult' 값을 반환하는 함수이므로, 예제에서 Sub를 함수로 변경하고'MessageBox'가 반환하는 값에 따라 적절한 값을 반환해야합니다. – Blackwood

+0

나는 @ rion-williams가 아마도 비 클래스 기반 함수를 오버라이드/오버로드하는 것에 대해 옳은지 우려하고있다. 그러나 'MsgBox()'와'MessageBox.Show()'같은 것을하는 두 개의 함수가 있다는 사실 덕분에 'MsgBox()'예외가 있습니다. 또한 "class": Microsoft.VisualBasic.Interaction.MsgBox()를 통해 원래 함수를 호출 할 수도 있습니다. –

0

나는 그것이 static이고 (클래스 반대) 표준 모듈 as seen here within the source으로 재정의하거나 MsgBox() 방법을 오버로드 할 수 있습니다 있다고 생각하지 않습니다

[StandardModule] 
public sealed class Interaction 
{ 
    /* Other methods omitted for brevity */ 

    public static MsgBoxResult MsgBox(object Prompt, MsgBoxStyle Buttons = MsgBoxStyle.ApplicationModal, object Title = null); 
} 

가장 좋은 방법은 등 자신의 방법 또는 선택 사양 인 과부하로 호출 처리하는 래퍼를 작성하는 것

관련 문제