내 코드는 다음과 같습니다.이미지를 비트 맵과 비교 하시겠습니까?
borderTop.BackgroundImage == Properties.Resources.buttonTopSelected
.BackgroundImage 속성이 리소스에 추가 한 그림과 같은지 확인해야합니다. 이 두 이미지를 어떻게 비교할 수 있습니까?
코드에서 하나는 이미지이고 하나는 비트 맵입니다.
어떤 제안이 있습니까?
내 코드는 다음과 같습니다.이미지를 비트 맵과 비교 하시겠습니까?
borderTop.BackgroundImage == Properties.Resources.buttonTopSelected
.BackgroundImage 속성이 리소스에 추가 한 그림과 같은지 확인해야합니다. 이 두 이미지를 어떻게 비교할 수 있습니까?
코드에서 하나는 이미지이고 하나는 비트 맵입니다.
어떤 제안이 있습니까?
동일한 개체가 아니기 때문에 비교가 작동하지 않습니다. 이는 개체 속성이 아닌 참조를 비교합니다. 이미지를 픽셀 단위로 비교할 수는 있지만 다소 과잉 인 경우 버튼 속성을 기존 버튼 속성에 저장하거나 단추를 자신의 클래스로 확장하여 추가 정보가있는 다른 방법을 사용하는 것이 좋습니다 (컴포지션 또는 계승).
----- 편집 -----
당신은 즉, 상속을 통해 버튼에 상태를 추가 할 수
public class MyButtonWithState : Button
{
public int ButtonState { get; set; }
}
그런 다음이 아니라 단지 버튼보다 MyButtonWithState을 사용하여 버튼을 인스턴스화 할 수 있습니다 .
public Form1()
{
InitializeComponent();
MyButtonWithState NewButton = new MyButtonWithState();
NewButton.Text = "My Test Button";
NewButton.ButtonState = 3;
this.Controls.Add(NewButton);
}
디자인 타임에이 기능을 사용하려면 좀 더해야하지만 기본 아이디어가 있어야합니다.
참고서를 비교하는 것이고 객체 자체는 비교하지 않는다는 것을 알았 기 때문에 나는 upvote를주었습니다. 그러나 나는 지금 이미지를 비교하는 방법에 대한 손실에있어. 어떻게 이미지를 비교하지 않고 버튼의 상태를 설정할 수 있습니까? 나는 어딘가에서 초기 상태를 얻어야 할 것이다. –
편집에 관해서 : 예, 그런 생각을하고있었습니다. 그것은 비록 내가 달성하려고하는 것에 대한 약간 과잉이다. –
이미지의 픽셀 별 비교 (내가 생각하는 유일한 옵션)와 비교해 볼 때 훨씬 더 가볍고 빠르다고 생각합니다. ButtonState를 문자열로 만들고로드 한 리소스의 이름을 저장할 수 있지만 그곳에서 많은 이점을 볼 수는 없습니다. 하루가 끝나면 코드가 마음에 들지 않아야합니다 :) – Lazarus
나중에 비교할 수 있도록 참조를 저장해야합니다. 뭔가 같은 :
Bitmap top = Properties.Resources.buttonTopSelected;
Bitmap bottom = Properties.Resources.buttonBottomSelected;
...
borderTop.BackgroundImage = top;
...
if (borderTop.BackgroundImage == top) {
// etc..
}
양식의 Dispose() 메서드에서 처리하는 것을 잊지 마세요.
BackgroundImage에 상태를 저장하는 것이 좋습니다. 아마도 다른 속성을 추가하면 상태가 BackgroundImage에 의해 효과적으로 표시되므로 DRY 원칙을 위반하게됩니다. 흠 .... .... 지금 생각하고있어, 아직도 냄새가 나쁘지 만 그게 나일지도 몰라. :) – Lazarus
코드를 더 게시해야하는데 귀하의 질문과 귀하의 코드 스 니펫이 어떤 관련이 있는지 이해할 수 없습니다. – Lazarus
@Lazarus : 질문을 더 간결하게 편집하겠습니다. –