[C#] 텍스트 에디터(윈도우 메모장) 만들기 2
2024. 2. 2. 19:19ㆍ[C#]/[C# 윈폼] 혼자해보는 윈도우 메모장 만들기
오늘은 1. 시간 입력 2. 파일 저장 3. 새 파일 기능을 구현해볼 것이다.
1. 시간 입력 기능
- 메모장에 보면 편집 -> 시간/날짜 라는 기능이 있다.
- 해당 메뉴를 클릭하거나 F5를 누르면 시간이 나타난다.
//시간 입력(F5)
private void TimeTextToolTip_Click(object sender, EventArgs e)
{
//현재 시간 추가
MyTextArea.Text += DateTime.Now.ToString();
//커서 맨 뒤로 이동
MyTextArea.SelectionStart = MyTextArea.Text.Length;
MyTextArea.SelectionLength = 0;
MyTextArea.Focus();
}
- 현재 Text뒤에 DateTime.Now를 사용해서 현재 날짜/시간을 추가해준다.
- 그냥 시간만 추가하면 커서가 맨 앞으로 이동한다. 고치기 위해 포커싱 하는 부분을 추가해줬다.
2. 파일 저장 기능
private void SaveToolTip_Click(object sender, EventArgs e)
{
SaveFile();
}
private void SaveFile()
{
if (string.IsNullOrEmpty(currentFilePath))
{
// 파일 경로가 없는 경우 SaveFileDialog 표시
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "텍스트 파일 (*.txt)|*.txt|모든 파일 (*.*)|*.*";
saveFileDialog.FilterIndex = 1; //필터 기본 값
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
currentFilePath = saveFileDialog.FileName;
}
else
{
return; // 사용자가 취소한 경우 저장 중단
}
}
try
{
// 텍스트 에디터의 내용을 파일에 저장
File.WriteAllText(currentFilePath, MyTextArea.Text);
isTextChanged = false; // 저장 후 변경되지 않은 상태로 표시
}
catch (Exception ex)
{
MessageBox.Show($"파일 저장 중 오류가 발생했습니다: {ex.Message}", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
- SaveFileDialog를 호출한다.
- 사용자가 저장 확인을 누르면 currentFilePath에 있는 이름을 저장해준 후 isTextChanged를 false로 설정한다.
3. 새 파일 기능
private void NewFileToolTip_Click(object sender, EventArgs e)
{
if (isTextChanged)
{
// 파일이 변경되었을 경우 저장 여부 확인
DialogResult result = MessageBox.Show("변경된 내용을 저장하시겠습니까?", "저장 확인", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
// 저장
SaveFile();
}
else if (result == DialogResult.Cancel)
{
// 취소
return;
}
}
// 새 파일 초기화
MyTextArea.Text = string.Empty;
currentFilePath = string.Empty;
isTextChanged = false;
}
- isTextChanged가 True면 저장 기능을 활성화 시키고
- 저장 후에는 다시 false로 만들어준다.
private void MyTextArea_TextChanged(object sender, EventArgs e)
{
isTextChanged = true;
}
- TextArea의 변화가 생기면 isTextChanged를 True로 만들어준다.
전체 코드
using Microsoft.VisualBasic;
namespace MyTextEditor
{
public partial class Form1 : Form
{
private string currentFilePath = string.Empty;
private bool isTextChanged = false;
public Form1()
{
InitializeComponent();
}
#region 파일
// 새 파일(Ctrl+N)
private void NewFileToolTip_Click(object sender, EventArgs e)
{
if (isTextChanged)
{
// 파일이 변경되었을 경우 저장 여부 확인
DialogResult result = MessageBox.Show("변경된 내용을 저장하시겠습니까?", "저장 확인", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
// 저장
SaveFile();
}
else if (result == DialogResult.Cancel)
{
// 취소
return;
}
}
// 새 파일 초기화
MyTextArea.Text = string.Empty;
currentFilePath = string.Empty;
isTextChanged = false;
}
// 저장(Ctrl+S)
private void SaveToolTip_Click(object sender, EventArgs e)
{
SaveFile();
}
//프린트(Ctrl+P)
private void PrintToolTip_Click(object sender, EventArgs e)
{
}
#endregion
#region 편집
//시간 입력(F5)
private void TimeTextToolTip_Click(object sender, EventArgs e)
{
//현재 시간 추가
MyTextArea.Text += DateTime.Now.ToString();
//커서 맨 뒤로 이동
MyTextArea.SelectionStart = MyTextArea.Text.Length;
MyTextArea.SelectionLength = 0;
MyTextArea.Focus();
}
#endregion
#region 메소드들
// 실제 파일 저장 로직
private void SaveFile()
{
if (string.IsNullOrEmpty(currentFilePath))
{
// 파일 경로가 없는 경우 SaveFileDialog 표시
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "텍스트 파일 (*.txt)|*.txt|모든 파일 (*.*)|*.*";
saveFileDialog.FilterIndex = 1;
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
currentFilePath = saveFileDialog.FileName;
}
else
{
return; // 사용자가 취소한 경우 저장 중단
}
}
try
{
// 텍스트 에디터의 내용을 파일에 저장
File.WriteAllText(currentFilePath, MyTextArea.Text);
isTextChanged = false; // 저장 후 변경되지 않은 상태로 표시
}
catch (Exception ex)
{
MessageBox.Show($"파일 저장 중 오류가 발생했습니다: {ex.Message}", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
// 텍스트 에디터 내용 변경 여부 확인
private void MyTextArea_TextChanged(object sender, EventArgs e)
{
isTextChanged = true;
}
#endregion
}
}
반응형
'[C#] > [C# 윈폼] 혼자해보는 윈도우 메모장 만들기' 카테고리의 다른 글
[C#] 텍스트 에디터(윈도우 메모장) 만들기 6 (0) | 2024.02.06 |
---|---|
[C#] 텍스트 에디터(윈도우 메모장) 만들기 5 (1) | 2024.02.05 |
[C#] 텍스트 에디터(윈도우 메모장) 만들기 4 (0) | 2024.02.04 |
[C#] 텍스트 에디터(윈도우 메모장) 만들기 3 (0) | 2024.02.04 |
[C#] 텍스트 에디터(윈도우 메모장) 만들기 1 (0) | 2024.02.01 |