디자이너 친화적 인 사전 바운드 데이터 소스로 파생 된 콤보 박스를 만드는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/451058

문제

데이터베이스에서 검색하는 객체 목록에 바인딩 된 System.windows.forms.combobox에서 파생 된 컨트롤을 작성하고 싶습니다. 아이디어는 다른 개발자가 원하지 않는 한 데이터 소스에 대해 걱정할 필요 없이이 컨트롤을 자신의 형태로 삭제할 수 있습니다.

Combobox를 확장 한 다음 생성자에 DataSource, DisplayMember 및 valuember를 설정하려고했습니다.

public class CustomComboBox : ComboBox
{
    public CustomComboBox() 
    {
        this.DataSource = MyDAL.GetItems(); // Returns List<MyItem>
        this.DisplayMember = "Name";
        this.ValueMember = "ItemID";
    }
}

내가 달릴 때 작동하지만 Visual Studio가 어떤 형태로든 추가되면 많은 오류가 발생합니다. 내가 얻는 오류는 다음과 같습니다.

"속성에 대한 코드 생성 '항목'이 실패했습니다. 오류는 다음과 같습니다.

이것을 달성하는 올바른 방법은 무엇입니까 (c#, winforms, .net 2.0+)?

도움이 되었습니까?

해결책 2

DesignMode 속성은 생성자에서 작동하지 않습니다. 한동안 인터넷 검색 에서이 Licensemanager를 발견했습니다.

if (LicenseManager.UsageMode != LicenseUsageMode.Designtime)
{
    // Do your database/IO/remote call
}

그러나 Licensemanager는 생성자에서만 작동합니다. 이벤트 핸들러의 경우 DesignMode를 사용하십시오.

원천: http://dotnetfacts.blogspot.com/2009/01/Indistifying-Run-Time-andDesign-Mode.html

다른 참조 : http://weblogs.asp.net/fmarguerie/archive/2005/03/23/395658.aspx

다른 팁

문제는 디자이너가 실제로 프로그램을 실행하는 것보다 약간 다른 맥락에서 컴파일과 실행을 수행한다는 것입니다.

생성자에서 코드를 다음과 같이 랩핑 할 수 있습니다.

if (!DesignMode)
{
  //Do this stuff
}

디자이너는 설계 중에 초기화 코드를 실행하지 않도록 지시합니다.

내 일반적인 의견 - 여기서 - 디자인 모드는 컨트롤이 설계 표면에 직접 배치되는 것 이외의 다른 상황에서 신뢰할 수 없습니다 - 즉 컨트롤이 다른 컨트롤에 배치되면 DesignMode가 설계 모드에 있더라도 사실이 아닙니다. 디자인 모드에 있는지, 특히 상속 된 컨트롤이 있는지 알 수있는 신뢰할 수있는 방법을 찾지 못했습니다. 컨트롤이 비 시각 제어 (예 : 일반적인 대화 상자)에서 상속되는 경우 사이트를 사용하는 변형조차도 신뢰할 수 없습니다.

보다 http://keyofdflat.livejournal.com/5407.html (마지막 주석을 읽으십시오).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top