DataGridView에 실행 취소 기능을 추가하려고합니다.
셀을 하나씩 처리하는 기능을 구현했지만 큰 셀을 실행 취소하는 기능은 구현하지 않았습니다.
public class UndoBuffer
{
public string undoCell { get; set; }
public int rowIndex { get; set; }
public int colIndex { get; set; }
}
이것은 문제의 코드입니다.
처음 실행하면 클래스 유형의 목록이 선언되고 셀 편집 시작 및 종료시 이전 값, 행, 열이 순차적으로 저장됩니다.
그러나 삭제, 붙여 넣기 또는 바꾸기와 같은 작업을 수행 한 후 코드가 제대로 작동하지 않습니다.
그래서 큰 셀을 처리 할 때 사용할 목록을 클래스에 추가하려고했습니다.
이렇게
public class UndoBuffer
{
public string undoCell { get; set; }
public int rowIndex { get; set; }
public int colIndex { get; set; }
public List<UndoBuffer> bufferArray = new List<UndoBuffer>(); //Added Code
}
선언하는 데 문제가 없었지만 사용하려고 할 때 문법 오류가 발생했습니다.
버퍼 스택에 하나씩 할당 할 때이 코드를 작성했습니다.
private List<UndoBuffer> undoBuffers = new List<UndoBuffer>(); //Declare CustomList
...
...
undoBuffers.Add(new UndoBuffer() { undoCell = beginEditCell, rowIndex = e.RowIndex, colIndex = e.ColumnIndex });
그리고이 코드는 버퍼 스택에 많은 수의 셀을 할당하는 데 사용되었습니다.
List<UndoBuffer> undobuffer = new List<UndoBuffer>();
List<UndoBuffer> array = new List<UndoBuffer>();
array.Add(new UndoBuffer()
{
undoCell = "BeginCell",
rowIndex = 33,
colIndex = 2
});
array.Add(new UndoBuffer()
{
undoCell = "BeginCell",
rowIndex = 34,
colIndex = 3
});
**undobuffer.Add(new UndoBuffer() {bufferArray.AddRange(array) });** // Grammar error code
문법 오류가 아닌 잘못된 방향으로 코딩하고 있습니까?
제발, 조언을 주시면 감사하겠습니다.
고마워
유형의 개체의 새 인스턴스를 만들 때 멤버를 초기화하는 동안 전체 문으로 실행되는 명령을 가질 수 없습니다. 메서드 나 람다에 대한 호출을 사용하더라도 할당 만 할 수 있으므로 함수 는 결과를 반환합니다. 여기서는 단지 프로 시저 호출이므로 아무것도 반환하지 않습니다.
따라서 전체 목록을 대체하지 않고 범위를 추가 할 수 있으려면 항목을 분리하고 다음을 작성해야합니다.
var buffer = new UndoBuffer();
buffer.bufferArray.AddRange(array);
undobuffer.Add(buffer);
또한 복합 인 bufferArray
것처럼 보이 므로 public 인 경우 get 전용 속성 이거나 선언시 또는 생성자에서 초기화 되는 readonly private 또는 protected 필드 여야합니다 .
public List<UndoBuffer> bufferArray { get; } = new List<UndoBuffer>();
다음과 같이 더 표준적이고 관련성이 높으며 깔끔하게 이름 지정을 개선하는 것이 좋습니다.
public class UndoBuffer
{
public string UndoCellText { get; set; }
public int RowIndex { get; set; }
public int ColIndex { get; set; }
public List<UndoBuffer> Buffers { get; } = new List<UndoBuffer>();
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다