C# 클래스 질문 드립니다

안녕하세요 반갑습니다.
제목을 어떻게 해야할지 감이 잘 안잡히네요;;

설명을 드리자면 => 2개의 Listview가 있고 똑같은 기능을하는 이벤트가 있습니다.
Ex) Item순서를 드래그 앤 드랍으로 바꾸는그런 평범한 기능이 있습니다.
밑에 소스가 Item을 끌어서 순서를 바꾸는 기능을 합니다.

private void ListView_MouseUp(object sender, MouseEventArgs e) 
        {                                                              
            bool bSamePosition = false;
            int i = 0;
            this.Cursor = Cursors.Arrow;
            ListViewItem selected = this.ListView.GetItemAt(e.X, e.Y);
            if (null != selected)
            {
                foreach (ListViewItem l in ListView.SelectedItems)
                {
                    if (l.Index == selected.Index)
                    {
                        bSamePosition = true;
                        break;
                    }
                }
                if (!bSamePosition)
                {
                    foreach (ListViewItem l in SongView.SelectedItems)
                    {
                        if (l.Index == 0) i = 1;                 
                        l.Remove();                              
                        ListView.Items.Insert(selected.Index + i, l);

다음 이 소스를 클래스로 만들어서 이렇게 사용 중입니다.
public class ListItemMove
{
public ListItemMove(ListView Item, MouseEventArgs e)
{
bool bSamePosition = false;
int i = 0;
Item.Cursor = Cursors.Arrow;
ListViewItem selected = Item.GetItemAt(e.X, e.Y);
if (null != selected)
{
foreach (ListViewItem l in Item.SelectedItems)
{
if (l.Index == selected.Index)
{
bSamePosition = true;
break;
}
}
if (!bSamePosition)
{
foreach (ListViewItem l in Item.SelectedItems)
{
if (l.Index == 0) i = 1;
l.Remove();
Item.Items.Insert(selected.Index + i, l);
}

    private void ListView_MouseUp(object sender, MouseEventArgs e) 
    {
        ListItemMove ListViewMove = new ListItemMove(SongView, e);
    }

여기까지 만들었고 만들고나니 욕심이 조금 더 나더군요.
완전히 똑같은 기능을해서 그냥 이벤트를 하나로 합쳐버리면 안될까하는 생각이 들었습니다.
( 각각의 이벤트를 정의하기 보단
두개의 ListView 이벤트를 둘다 SongView_MouseUp로 해서 작동하면 안될까?)
여기서 sender에 접근해서 시도해보았는데 막혀버렸습니다.

좋은 방법이 없을까해서 질문드립니다.

죄송합니다. 설명을 어떻게 해야할지 감이 안잡히네요.
2개의 ListView가 있고 같은 기능을하는 이벤트를 하나로 합치고 싶습니다.
그 방법에 대해서 질문 드립니다.

1 Like

이상하게 중간에 있는 소스가 코드로 표시가 안돼네요.

1 Like

sender로 됩니다.

var listView = sender as ListView;

하신 다음

ListItemMove ListViewMove = new ListItemMove(listView, e);

하면 됩니다. (동일한 기능 이라면요)

4 Likes

안녕하세요 Stupid입니다.

간단하고 잘되네요. :grinning:
요거하나 못해서 얼마나 애먹었는지;; 애석하네요
LIstView 이벤트를 대부분 통합했습니다.
소스가 깔끔해지는 느낌이라 괜찮네요.

다만 통합하는게 좋은지 안좋은지 정확하게 어떤 장단점이 있는지는 잘 모르겠네요 :face_with_monocle:

댓글 감사합니다.
좋은 하루되세요.

3 Likes

엇… 제가 실수로 @dimohy 님께 채택된 "해결책"을 날려버린 것 같아요…
@Stupid 번거로우시겠지만 다시 한번 채택 부탁드립니다 :pray:

2 Likes