2012-04-19 2 views
0

내 Windows 양식 프로젝트에서 특정 양식에 문제가 있습니다. 하나의 양식 만 문제가 있습니다. 이 문제가없는 동일한 유형의 참조를 사용하는 몇 가지 다른 방법이 있습니다.Windows Form 컨트롤이 코드로 인해 업데이트되지 않는다

코드 숨김을 통해 컨트롤을 수정해도 양식에서 실제로 컨트롤이 업데이트되지 않는 것이 문제입니다. 데이터베이스에서 가져온 값을 (.Items.Add() 메서드를 통해) 콤보 상자의 Items 컬렉션에 추가하는 것부터 텍스트 상자 또는 확인란을 설정하거나 해제하도록 설정, 텍스트 상자의 텍스트 또는 체크 된 상태 확인에 이르기까지 상자 ... 아무것도 작동하지 않습니다. 어떤 컨트롤에 대해 활성화 된 상태를 실제로 설정하는 코드를 제외하고 모든 메서드에서 모든 코드를 주석 처리 해 보았습니다. 아무 것도 알지 못하고 실행되고 있지 않은지 확인하기 위해 문제가 여전히 발생합니다.

활성화 상태를 변경하는 코드는 디버거가 표시 할 때 분명히 히트되며 조건에 따라 true 또는 false 여부에 관계없이 Enabled 상태가 올바르게 설정됩니다. 비활성화해야하는 컨트롤은 여전히 ​​편집 가능하며 편집 가능한 것처럼 보입니다. 코드는 원래 컨트롤 이름을 자동으로 채우기 위해 intellisense를 사용하여 작성되었으므로 코드에서 폼의 올바른 컨트롤로 연결하는 데 문제가 없어야합니다. 또한 양식을 더 크게 만들고 빈 패널을 놓고 새로운 텍스트 상자와 확인란을 표시하고 같은 방법으로 패널을 설정하거나 해제하도록 설정했으며 컨트롤을 실행했을 때도 그렇지 않았습니다. 코드 뒤에 변경.

내가 누락 될 수있는 것에 대한 제안 사항이 있으십니까? 이것은 Windows 양식의 기본 기능으로 무엇이 문제인지 전혀 모르고 있으며 Google 검색 또는이 사이트 검색으로 비슷한 문제를 찾을 수 없습니다.

감사합니다.

편집 : 다음은 작동해야하지만 작동하지 않는 코드 샘플입니다. 비슷한 코드가 문제없이 몇 가지 다른 형식으로 사용됩니다. chkDisable라는 체크 박스가 선택되어

이 이벤트가 실행됩니다

private void chkDisable_CheckedChanged(object sender, EventArgs e) 
    { 
     SetControlsEnabledStatus(!((CheckBox)sender).Checked); 
    } 

    private void SetControlsEnabledStatus(bool enabledStatus) 
    { 
     textBox1.Enabled = enabledStatus; 
     textBox2.Enabled = enabledStatus; 
    } 

나는이 사건이 제대로 발사 것을 제대로 연결되어 있음을 100 % 확신하고 텍스트 상자의 사용 가능 상태가 올바르게 설정되어 있는지 . 이 메서드를 덮어 쓸 수있는 코드의 주석을 제거한 다른 메서드는 없습니다. 그러나 확인란을 클릭 한 후 양식이 다시로드되는 즉시 텍스트 상자가 항상 활성화됩니다.

EDIT2가 : 경우 사람이 내 문제를 일으키는 것입니다 여기에, 자신의 문제를이 건너 온다 :

드디어이 아래로 추적 얻을 수있는 새로운 형태에 처음부터 다시 시작해야했다

. 생성자와 FormLoad 이벤트에서 InitializeComponent()에 대한 호출이 있음이 밝혀졌습니다. 기본적으로, 나는 Disable 이벤트 만 실행하면서 동일한 컨트롤을 가진 새로운 폼을 만들었고, Load 코드를 복사 할 때 Disable은 작동을 멈췄습니다.

+1

코드를 표시 하시겠습니까? – Likurg

+0

... 가능하면 * .Designer .cs 파일도 있습니다. – Alan

+0

@Likurg, 코드 샘플을 추가했습니다. – Greg

답변

1

솔루션을 정리하고 모두 다시 시작하여 시작하십시오. (: 그래도 문제가 해결되지 않으면

, 당신은 몇 가지 코드를 게시 할 수 있습니다

편집 : 여기에서 볼 수없는 코드,

좋아 ... 내가 제공 할거야 몇 가지 기본 조언

양식 전체에 MessageBox.Show ("내가 실행했습니다!")를 넣기 시작하여 생성자/초기화 이벤트에 넣습니다.클릭 이벤트에 넣으십시오. 어딘가에서 예외를 처리하고 양식을 업데이트하는 코드가 절대로 실행할 기회를 얻지 못할 수도 있습니다.

분명히 잘못된 것이 있습니다. 문제가 코드에 존재한다는 사실을 배제 할 수 없을 때까지는 그곳에 있다고 가정합니다. 코드를 게시하면 코드를 복사하여 자체 프로젝트에 붙여넣고 어떻게 동작하는지 확인할 수 있습니다. 작동하면 코드가 양호하다는 것을 확인할 수 있으며 문제는 다른 곳에 있어야합니다.

조금 도움이 되길 바랍니다. (:

편집 :

좋아, 당신이 제공 한 코드를 사용하여, 내가 만든 샌드 박스 프로젝트 :

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WinFormsSandbox 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void chkDisable_CheckedChanged(object sender, EventArgs e) 
     { 
      SetControlsEnabledStatus(!((CheckBox)sender).Checked); 
     } 

     private void SetControlsEnabledStatus(bool enabledStatus) 
     { 
      textBox1.Enabled = enabledStatus; 
      textBox2.Enabled = enabledStatus; 
     } 
    } 
} 

enter image description here

enter image description here

그것은 나를 위해 작동합니다. 게시 한 코드에 오류가 없어야합니다.

편집 :

당신은, 내가 문제의 근본 원인을 찾는 포기 싫어 알고 있지만, 이것은 시간에 민감한 문제가 있다면, 그것은 빨리 처음부터 새 양식을 작성하는 방법이 될 수있다 그냥 기능을 복사하십시오. (:

+0

감사합니다.하지만 솔루션을 청소해도 도움이되지 않았습니다. 체크 표의 CheckChanged 메소드와 같은 꽤 표준적인 코드 샘플이 도움이 될 것입니다. 체크 여부에 따라 다른 컨트롤을 사용하거나 사용하지 않도록 설정하십시오. – Greg

+0

@Greg, 코드없이 문제를 찾을 수 있기를 바랍니다. 모든 것이 '꽤 표준'이라면이 질문을하지 않았을 것입니다. 어쨌든, 수정 구슬을 찾으면 해결책을 찾으려고 노력할 것입니다. –

+0

@ L.B, snarky 될 필요가 없습니다. 나는이 분야에서 내가 가진 것보다 훨씬 더 많은 경험과 지식을 가진 사람들이 있다는 것을 알고 있으므로, 코드 샘플없이 질문하는 것이 나쁜 것이라 생각하지 않았습니다. 즉, 샘플을 포함하도록 내 게시물을 편집했습니다. 조언이 있으면 알려주세요. – Greg

1

비슷한 문제가 있었는데 다른 폼 처리 코드를 보호하는 부울 값을 반전하는 OnShown 처리기를 내 양식에 추가하여 도움을 받았습니다. 아이디어는 초기화 프로세스에서 무언가가 컨트롤의 이벤트가 발생하기를 원하지 않는 방식으로 실행됩니다. 이상적이지는 않지만 적어도 디버깅 방법으로 시도해 볼 가치가 있습니다.

+0

고마워, 그건 내가 생각하지 못한 아이디어이다. 나는 그것을 추가했고 어떤 이유로 OnShown을위한 이벤트 핸들러를 두 번 실행했다는 것을 알게되었다. 문제는 여전히 있지만, 이것은 확실히 단계 다. 올바른 방향. – Greg

관련 문제