Eto: [WPF] RichTextArea 선택이 μ œλŒ€λ‘œ μž‘λ™ν•˜μ§€ μ•ŠμŒ

에 λ§Œλ“  2018λ…„ 10μ›” 04일  Β·  7μ½”λ©˜νŠΈ  Β·  좜처: picoe/Eto

μ˜ˆμƒλ˜λŠ” λ™μž‘

μ •μ˜λœ λ²”μœ„μ— 따라 ν…μŠ€νŠΈκ°€ μ˜¬λ°”λ₯΄κ²Œ μ„ νƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ‹€μ œ 행동

였λ₯Έμͺ½μ— 5개의 λ¬Έμžκ°€ 잘λͺ» λ°°μΉ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

문제λ₯Ό μž¬ν˜„ν•˜λŠ” 단계

  1. RichTextArea 컨트둀 λ§Œλ“€κΈ°
  2. 일뢀 ν…μŠ€νŠΈ μž…λ ₯
  3. 선택 ν•­λͺ©μ„ μ •μ˜ν•˜μ—¬ 색상을 μ„€μ •ν•©λ‹ˆλ‹€.

문제λ₯Ό λ³΄μ—¬μ£ΌλŠ” μ½”λ“œ

rtfcontrol.Appen(initialtext, true);
rtfcontrol.Append(sometext, true);
rtfcontrol.Selection = new Range<int>(rtfcontrol.Text.Length - sometext.Length, rtfcontrol.Text.Length -1);
rtfcontrol.SelectionForeground = Colors.Blue;
rtfcontrol.Append("\n", true);
rtfcontrol.Selection = new Range<int>(rtfcontrol.Text.Length);

λͺ…μ„Έμ„œ

  • 버전: 2.5.0-ci-10013
  • ν”Œλž«νΌ: WPF
  • 운영 체제: Windows 10

WPF:

wpf

GTK2(λ¦¬λˆ…μŠ€):

gtk2_linux

자마린.λ§₯:

xamarin mac

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

@DanWBR , μ•„ 예, λΆˆν–‰νžˆλ„ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. WPFλŠ” Text 속성 끝에 κ°œν–‰μ„ μΆ”κ°€ν•©λ‹ˆλ‹€(ν…μŠ€νŠΈμ— 포함 여뢀에 관계없이). 이 μ‹œμ μ—μ„œ ν•΄κ²° 방법을 찾지 λͺ»ν–ˆμ§€λ§Œ 이 λ¬Έμ œμ™€ λ³„κ°œμ˜ λ¬Έμ œμž…λ‹ˆλ‹€.

λ‚΄κ°€ ꢌμž₯ν•˜λŠ” 것은 λ³€μˆ˜μ˜ ν˜„μž¬ μœ„μΉ˜λ₯Ό μœ μ§€ν•˜κ³  ν…μŠ€νŠΈλ₯Ό μΆ”κ°€ν•œ ν›„ μ¦κ°€μ‹œν‚€λŠ” κ²ƒμž…λ‹ˆλ‹€. 길이λ₯Ό μ–»κΈ° μœ„ν•΄ 맀번 Text 속성에 μ•‘μ„ΈμŠ€ν•˜λ©΄ ν…μŠ€νŠΈκ°€ 컀질수둝 속도가 λŠλ €μ§‘λ‹ˆλ‹€.

λͺ¨λ“  7 λŒ“κΈ€

Windowsμ—μ„œ 쀄 끝 λ¬ΈμžλŠ” 선택 ν•­λͺ©μ— λŒ€ν•œ μΈλ±μŠ€μ— μ–΄λ–»κ²Œ λ“  κ³„μ‚°λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν˜„μž¬ ν•΄κ²° λ°©λ²•μœΌλ‘œ λ‹€μŒ μ½”λ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

private void Write(string message, Color c)
        {
            Append(message + Environment.NewLine, true);

            int idx = -1, last = -1;
            if (Environment.OSVersion.Platform == PlatformID.Unix)
            {
                idx = Text.LastIndexOf(message);
                last = Text.Length;
            }
            else
            {
                var lines = string.Join("", Text.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries));
                idx = lines.LastIndexOf(message);
                last = lines.Length;
            }

            if (idx == -1)
                return;

            Selection = new Range<int>(idx, idx + message.Length);
            SelectionForeground = c;
            Selection = new Range<int>(last, last);
        }

ν•˜μ§€λ§Œ 이것은 λΆ„λͺ…νžˆ λ²„κ·Έμž…λ‹ˆλ‹€ ...

예, 이전에 @ManuelHu 와 λ™μΌν•œ 해킹을 μ‚¬μš©

문제λ₯Ό μ‹ κ³ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€!

μ•ˆλ…•ν•˜μ„Έμš” @DanWBR ,

이것은 μ΅œμ‹  개발 λΆ„κΈ°μ—μ„œ μˆ˜μ •λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. ν•œλ²ˆ ν•΄λ³΄μ‹œκ² μ–΄μš”? λͺ¨λ“  ν”Œλž«νΌμ—μ„œ 쀄 λ°”κΏˆμ€ 이제 단일 \n 문자둜 μ²˜λ¦¬λ©λ‹ˆλ‹€.

@cwensleyλ‹˜ , 아직 μˆ˜μ •ν•΄μ•Ό ν•  λ¬Έμžκ°€ ν•˜λ‚˜ 남아 μžˆμŠ΅λ‹ˆλ‹€.

captura de tela 2018-11-16 as 08 06 39

@DanWBRλ‹˜ , ν•œ 가지 λ¬Έμ œμ— λŒ€ν•œ μž¬ν˜„μ΄ μžˆμŠ΅λ‹ˆκΉŒ? λ‚˜λŠ” 그것을 μž¬ν˜„ ν•  μˆ˜μ—†λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

https://github.com/DanWBR/dwsim5/blob/windows/DWSIM.UI.Desktop.Forms/Forms/Flowsheet/Flowsheet.eto.cs#L1245

잘λͺ»λœ 인덱슀λ₯Ό μ‚¬μš©ν•˜κ³  μžˆλŠ” 것은 μ•„λ‹κΉŒμš”? κ·ΈλŸ¬λ‚˜ macOS 및 GTKμ—μ„œλŠ” μž‘λ™ν•©λ‹ˆλ‹€.

@DanWBR , μ•„ 예, λΆˆν–‰νžˆλ„ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. WPFλŠ” Text 속성 끝에 κ°œν–‰μ„ μΆ”κ°€ν•©λ‹ˆλ‹€(ν…μŠ€νŠΈμ— 포함 여뢀에 관계없이). 이 μ‹œμ μ—μ„œ ν•΄κ²° 방법을 찾지 λͺ»ν–ˆμ§€λ§Œ 이 λ¬Έμ œμ™€ λ³„κ°œμ˜ λ¬Έμ œμž…λ‹ˆλ‹€.

λ‚΄κ°€ ꢌμž₯ν•˜λŠ” 것은 λ³€μˆ˜μ˜ ν˜„μž¬ μœ„μΉ˜λ₯Ό μœ μ§€ν•˜κ³  ν…μŠ€νŠΈλ₯Ό μΆ”κ°€ν•œ ν›„ μ¦κ°€μ‹œν‚€λŠ” κ²ƒμž…λ‹ˆλ‹€. 길이λ₯Ό μ–»κΈ° μœ„ν•΄ 맀번 Text 속성에 μ•‘μ„ΈμŠ€ν•˜λ©΄ ν…μŠ€νŠΈκ°€ 컀질수둝 속도가 λŠλ €μ§‘λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰