Visual Studio 모든 함수마다 붙여넣기할 수 있는 기능이 있나요?

안녕하세요. 제가 만드는 프로젝트는 118개의 함수가 있고 그 118개에 다 복사 붙여넣기 해야하는 경우가 많은데 하나 하나 일일이 하다보면 힘들어서
private void He_Click(object sender, EventArgs e)
{
elementSym = ec.elementSymbol(1);
latName = ec.latinName(1);
engName = ec.englishName(1);
cas = ec.CASNum(1);
elementFounder = ec.founder(1);
foundY = ec.foundYear(1);
shell = ec.electronShell(1);
number = ec.atomicNumber(1);
weight = ec.atomicWeight(1);
elementForm.elementSymbolText = elementSym;
elementForm.latinNameText = latName;
elementForm.englishNameText = engName;
elementForm.casNumberText = cas;
elementForm.founderText = elementFounder;
elementForm.foundYearText = foundY;
elementForm.electronShellText = shell;
elementForm.atomicNumberText = number;
elementForm.atomicWeightText = weight;
elementForm.ShowDialog();
}
이렇게 다 붙여넣기를 해야합니다.
그래서 모든 함수마다 한번에 붙여넣기 하는 기능은 없을까요?

1개의 좋아요

개체의 복사를 이야기 하는 건가요? 정획히 이해가 안되어서… 만약 맞다면, c# 깊은 복사(Deep Copy) VS 얕은 복사(Shallow Copy) : 네이버 블로그

이글과 얕은 복사, 깊은 복사에 대해 살펴보세요.

그리고 c# 9부터 새로 추가된 record와 with를 사용하면 좀 더 간단합니다.

복사하는게 값형이라면 잘되는데 참조형이라면 얕은 복사가 되기 때문에 깊은 복사를 이용해야 합니다.

2개의 좋아요

제가 계속 찾아봤는데

이 사이트에 복사 붙여넣기 할때 좋은 단축키들을 모아 놓았더라고요 ㅎㅎ 이 사이트에서 마지막에 잇는 단축키를 사용하면 될 것 같네요 ㅎㅎ

2개의 좋아요

저도 노가다를 싫어해서 이런 비슷한 상황이 오면 그냥 간단한 유틸리티 프로그램을 만들어서 실행시켜 해결합니다. 저 상황을 예로 들어 만약 저라면 코드가 붙여질 대상 파일리스트를 배열에 넣고 순차적으로 돌아가며 메서드만 찾아내어 본문에 붙여넣기할 스트링을 삽입 하도록 할 것 같습니다. 또 이렇게 할 수밖에 없는 이유가 이 작업이 빈번하다는게 큰 이유입니다. 매 작업시 마다 118개의 메서드를 일일히 찾아다니며 중복되는 코드를 집어넣는것은 어마어마한 삽질이 아닐수가 없으니까요

2개의 좋아요

저도 엄청난 삽질이라고 느껴서 어제 자료를 찾다가 비주얼스튜디오에 Alt + Shift + ;를 하면 특정 단어를 찾을 수 있어서 그걸로 한번에 118개의 메소드에서 붙여넣기를 하기 편하더라구요 ㅎㅎ


이렇게 특정 단어를 찾은 뒤 한번에 쓸 수 있으니까 편하더라구요

1개의 좋아요

저번에 진행하시던 주기율표 작성하는 프로그램이었던가요?

보통 저런 경우엔 118개의 같은 버튼일 테니까,
각자 클릭 이벤트에 하나의 이벤트 메서드를 구독시킨 다음에,
메서드에서 특정 원소에 해당하는 클래스의 데이터를 넘겨주었으면 괜찮지 않았을까 하는 생각도 듭니다.
다 일반화가 가능한 항목이었을 것 같아요.

2개의 좋아요

저는 elementClass라는 클래스파일을 만들어서 거기 안에 배열로 만든 뒤 테이블 클래스에서 배열을 가져와 사용하거든요 제가 아직 초보라서;; 클래스의 데이터를 넘겨준다는 것이 어떤 것인가요??

2개의 좋아요

얕은 꼼수긴 하지만,
예를들어

ElementsButton_Click(object sender,EventArgs e)
{
      var button = sender as Button;
      string elementName = button.Text;
}

이런식으로 접근 해서,
(퍼포먼스가 떨어질 수 있겠지만)
배열이 아니라 Dictionary로 접근하셨어도 괜찮을 듯 하구요.
모든 코드를 본 게 아니라서 추측으로 보건대 팝업으로 창을 띄우는 듯 하는데,
elementSymbol~atomicWeight 까지를 하나의 클래스로 만드셔서 (ex : Elements)
(이 경우엔 Struct도 되지 않았을꼬 싶습니다.)

ec.elementSymbol(n) 보다, List<Elements>[n].Symbol ~ Weight 등으로 접근하는 방법도 괜찮지 않았을까 싶어요.

2개의 좋아요

그렇게 되면 팝업창의 멤버, 즉 필드 또는 Property로 Element의 인스턴스 하나만 받으면

팝업 창에서 작성하기도 편리하시지 않을까 예상됩니다.
Dictionary<string,Elements>로 활용하는것도 괜찮을 듯 해요.
Key를 “H” , “He” , “Li”… 등으로 하고
Value를 Elements로 하는 식으로요.

2개의 좋아요

오 그런 방법도 있겠네요! 조언 감사합니다! 한번 만들어봐야겠군요 ㅎㅎ

1개의 좋아요

많은 함수에 같은 내용을 반복해서 넣는 것을 줄이면 아마 코드가 좀 많이 이뻐질 겁니다 :slight_smile:

그래서 저는 이런 형식이면 sender를 이용해 저 내용을 처리할 수 있는 함수를 만들 것 같아요.

private void SetForm(object sender)
{
   if (sender is not Form form)
       return;

   ...
}
2개의 좋아요

제가 아직 초보라ㅠㅠ 혹시 예제 같은 것이 있을까요??

1개의 좋아요

@gloomn님 github에 프로젝트를 오픈 해주시면 이곳 분들이 도움을 드릴 수 있지 않을까 생각해봅니다. 용기있게 한번 오픈해주시죠!

3개의 좋아요

제가 다음주 중간고사라서 담주 금까지는 프로그래밍을 못해요 ㅠㅠ
https://github.com/gloomn/Periodic-Table-Beta
여기가 제 깃허브 주소입니다!

3개의 좋아요

코드 구조에 대해서 고민해 보시는게 더 좋은 해결책이긴 하지만, 해당 코드만 Visual Studio Code를 사용해 편집하는 방법도 있습니다. 다음 포스트를 한 번 읽어보세요: https://tahoeninjas.blog/2019/03/30/multi-cursor-editing-in-visual-studio-code/

VS에도 멀티 커서 기능이 있기는 한데 VSCode에 비해서는 아직 살짝 부족하긴 합니다.

3개의 좋아요