vscode Add setting to keep tab characters in HTML clipboard

xam8gpfp  于 4个月前  发布在  Vscode
关注(0)|答案(6)|浏览(62)

我们已经将所需的数据写入剪贴板,因为它太大无法发送。请粘贴。
问题类型:错误
我在VS Code中选择了一部分文本,将其复制到剪贴板(ctrl-c),将鼠标光标移动到Word文档上,并尝试使用ctrl-V粘贴文本。文本出现在Word中,但制表符被转换为空格。
然后我尝试另一种方法:VS Code -> TextPad -> Word,在这里制表符被正确复制。- 因此,在复制粘贴操作中,微软应用程序之一失败了:Word或Code。请进行更正!
VS Code版本:Code 1.60.2 ( 7f6ab54 , 2021-09-22T12:00:31.514Z)
操作系统版本:Windows_NT x64 10.0.19043
受限模式:否
系统信息
| 项目 | 值 |
| ------------ | ------------ |
| CPUs | Intel(R) Core(TM) i7-3635QM CPU @ 2.40GHz (8 x 2395) |
| GPU状态 | 2d_canvas: enabledgpu_compositing: enabledmultiple_raster_threads: enabled_onoop_rasterization: enabledopengl: enabled_onrasterization: enabledskia_renderer: enabled_onvideo_decode: enabledvulkan: disabled_offwebgl: enabledwebgl2: enabled |
| 负载(平均) | undefined |
| 内存(系统) | 15.89GB (12.20GB free) |
| 进程参数 | --crash-reporter-id 45a27e0b-c086-47c7-bb82-a3bc76a31454 |
| 屏幕阅读器 | 无 |
| VM | 0% |扩展:无A/B实验

i7uaboj4

i7uaboj41#

我们刚刚在这个区域(#131922)发送了一个更改给 1.61.0。请问您能否更新到 1.61.0 并检查是否仍然对您产生影响?

另外,请您也在这里提供您正在使用的文本(我想查看它是否使用制表符或空格进行缩进),并附上将粘贴的文本在 Word 中呈现的截图。

o2gm4chl

o2gm4chl2#

你好!我现在坐在我的Mac(Big Sur最新版本)上,并按照你的要求做了以下操作:

  • 我将VS Code更新到1.61.0版本(日期:2021-10-07)
  • 我打开了一个文档,将其部分内容复制粘贴到Word中。同样的问题仍然存在,Word中的制表符被空格字符替换。当我将相同的剪贴板粘贴到BBEdit中时,制表符是存在的。下面是你收到的三个文档:
    • "Code and Word.png":截图,可以看到VS Code和Word中的复制文本
    • "Kohdehaku.xaml.cs":我们正在查看的文本文件(最初由Visual Studio在Windows 10上创建)
    • "Kohdemuok.swift":另一个我测试过的文本文件,结果也是一样的。这个文件是由Xcode在Mac上创建的。
      我最初是在Windows笔记本电脑上发现了这个问题,但在Mac上也出现了同样的问题。
      最好的祝愿,
      Erkki Ahola
      ----------------- // 4.10.2021 Kohdehaku.xaml.cs (HerbaarioWin) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; using System.Data.SQLite; using static HerbaarioWin.Vakiot; // Avataan näyttö, jossa on hakuehdot kohteen ja havainnon löytämiseksi. // Näytön alaosassa on luettelo hakutuloksista // Modaalinen ikkuna. Painikkeesta Sulje asetetaan DialogResult = false. // Luokan muodostimesta virhetarkistuksissa ikkuna suljetaan, jolloin logiikka johtaa // antamaan arvon DialogResult = false. /* K11 Alasvetovalikot() K14 ButtonHae_Click(object sender, RoutedEventArgs e) K05 ButtonNayta_Click(object sender, RoutedEventArgs e) K19 ButtonRyhma_Click(object sender, RoutedEventArgs e) K13 ButtonSulje_Click(object sender, RoutedEventArgs e) K07 ButtonTyhjenna_Click(object sender, RoutedEventArgs e) K06 ButtonUusi_Click(object sender, RoutedEventArgs e) K22 HaekaikkiID() -> List<int> K01 Kohdehaku(SQLiteConnection conn) K01a Kohdehaku(SQLiteConnection conn, int mod, Kohde kox) K01b Kohdehaku(SQLiteConnection conn, string selez, string ehtoz) K17 Lopetus() K15 TeeHakuKohteet(string kyselyz, bool esiin) -> bool K20 TeeSelectOsat() K02 TeeWhere(int modpai) K18 TyhjaaKentat() K08 Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) */ namespace HerbaarioWin { public partial class Kohdehaku : Window { public int Kantamuutos { get; set; } = EIOO; // OUTPUT onko tietokantaan tehty muutoksia EIOO, MUUTOS public int Mode // output siitä saatiinko ikkuna esiin { get; set; } = EIOO; // KORJAA: normaali arvo aloituksen jälkeen // OOKOO: ihan lopussa olemme poistumassa oikeaa reittiä eikä haluta mennä -> Lopetus() // jos arvoksi jää EIOO, oli luokan muodostimessa ongelma private readonly List<Havakohrivi> tulostaulu; // datagrid-taulukon sisältö private readonly SQLiteConnection conlite; private readonly Dictionary<string, string> isanat = null; // initiedot private readonly string kuvapolkuz = ""; // kuvakansionpolku ini-tiedoista private StringBuilder swalku = null; // WHERE-osa private StringBuilder sbalku = null; // SELECT-osa private List<int> koht; // hakutuloksen kohteiden id:t //----------------------------------------------------------------------- // 3.10.2021 K01 public Kohdehaku(SQLiteConnection conn, Dictionary<string, string> isa) { InitializeComponent(); isanat = isa; conlite = conn; if (conlite == null || isanat == null || isanat.Count < 2) { _ = MessageBox.Show("Virhe input-parametrissä", "(K01-01) Ohjelmointivirhe"); Close(); return; } _ = isanat.TryGetValue("kuvapolku#", out kuvapolkuz); Mode = KORJAA; // voidaan muokata Alasvetovalikot(); tulostaulu = new List<Havakohrivi>(); TeeSelectOsat(); // laitetaan otsakkeeseen onko tuotanto- vai testikanta Title += " " + Meka.MikaKanta(conlite, isanat); _ = textSunimi.Focus(); } //----------------------------------------------------------------------- // 3.10.2021 K01a // mod = HARVI muuttujassa kox.IHava on harvinaisuusarvo, ja // muuttujassa kox.Kuva on "Näyte", "Valokuva" tai "Digikuva", tai ei mitään eli "kaikki" // mod = AIKA muuttujassa kox.Kuva on aikaan liittyvä hakuehto, ja Nega paikkakuntaehto (ei pakoll) // paikkakuntaehto tulee luokasta Paik_lista // mod = LAATU muuttujassa kox.Laatuz on hakuehtona toimiva laatunimi // ja pitää tapahtua vastaava haku // Tätä kutsuu Rapo_ikku kahdessa paikassa, ja Paik_lista yhdessä paikassa public Kohdehaku(SQLiteConnection conn, Dictionary<string, string> isa, int mod, Kohde kox) { bool virhe = false; isanat = isa; conlite = conn; if ((mod != HARVI && mod != AIKA && mod != LAATU) || (kox.Kuva == "" && mod == AIKA)) { virhe = true; } if (!virhe && mod == HARVI && kox.KohHuom.IsEmpty()) { virhe = true; } if (!virhe && mod == LAATU && kox.Laatuz == "") { virhe = true; } if (conlite == null || isanat == null || isanat.Count < 2) { virhe = true; } if (virhe) { _ = MessageBox.Show("Väärä input", "(K01a-02) Ohjelmointivirhe"); Close(); return; } InitializeComponent(); _ = isanat.TryGetValue("kuvapolku#", out kuvapolkuz); _ = textSunimi.Focus(); Alasvetovalikot(); TeeSelectOsat(); if (mod == HARVI) { comboYleis.SelectedValue = Meka.EtsiComboitem(comboYleis, kox.KohHuom); comboLaji.SelectedValue = Meka.EtsiComboitem(comboLaji, kox.Kuva); } else if (mod == LAATU) { comboLaatu.SelectedValue = Meka.EtsiComboitem(comboLaatu, kox.Laatuz); } else if (mod == AIKA) { string z = kox.Kuva; if (z.StartsWith("*.") && z.EndsWith(".*")) { if (z[3] == '.') { textAika1.Text = "1." + z[2..3]; textAika2.Text = "31." + z[2..3]; } else { textAika1.Text = "1." + z[2..4]; textAika2.Text = "31." + z[2..4]; } } else { textAika1.Text = z; } textPaikka.Text = kox.Nega; // tullaan Paik_lista:sta } else { _ = MessageBox.Show($"Väärä input mod={mod}", "K01a-03"); Close(); return; } Mode = KORJAA; // jos paikkanimessä on jotain, haku tarkkaan (tullaan Paik_lista:sta) int mopa = kox.Nega.IsEmpty() ? VILLI : TARKKA; tulostaulu = new List<Havakohrivi>(); if (TeeWhere(mopa)) // kootaan haun sql-lause kenttiin edellä laitetuista arvoista { _ = TeeHakuKohteet(KAIKKI); // näytä hakutulos } } //----------------------------------------------------------------------- // 3.10.2021 K01b // Tätä kutsutaan myös Rapo_ikku:ssa // selez = WHERE-osan loppuun tulevaa, ei saa olla sellaista että tarvitaan alkuun sulkeita // ehz = ehto-osuus // Tässä kootaan hakuehto käyttäen Kohdeikku:n omaa SELECT-osaa public Kohdehaku(SQLiteConnection conn, Dictionary<string, string> isa, string selez, string ehz) { InitializeComponent(); isanat = isa; conlite = conn; if (conlite == null || isanat == null || isanat.Count < 2) { _ = MessageBox.Show("Virhe input-parametrissä", "(K01-01) Ohjelmointivirhe"); Close(); return; } // tiedot paikoilleen alasvetovalikkoihin; ei tarvita Dictionarya _ = isanat.TryGetValue("kuvapolku#", out kuvapolkuz); Alasvetovalikot(); TeeSelectOsat(); _ = textSunimi.Focus(); textSunimi.Text = "ERIKOISHAKU"; swalku = new StringBuilder(""); // WHERE-osa _ = sbalku.Append(selez); _ = swalku.Append(ehz); Mode = KORJAA; tulostaulu = new List<Havakohrivi>(); _ = TeeHakuKohteet(KAIKKI); // toteutetaan haku } //----------------------------------------------------------------------- // 12.5.2021 K11 private void Alasvetovalikot() { // tiedot paikoilleen alasvetovalikkoihin List<Combocoll> dct = Meka.HaeCombodata("Lajit", conlite, true); comboLaji.ItemsSource = dct; dct = Meka.HaeCombodata("Laadut", conlite, true); comboLaatu.ItemsSource = dct; dct = Meka.HaeCombodata("Alueet", conlite, true); comboAlue.ItemsSource = dct; dct = Meka.HaeCombodata("Yleisyydet", conlite, true); comboYleis.ItemsSource = dct; } //----------------------------------------------------------------------- // 3.10.2021 K20 // tehdään kahden erityypisen haun tarvitsemat paruslausekkeet // nämä tyypit ovat Erikoishaku (K01b) ja muu tavallinen haku private void TeeSelectOsat() { // Muualla (K01b ja K02) rakennetaan SQL-lausekkeen muut osat // Huom! Tämä toimi Windowsissa oikein, jos havainnolla ei ole yhtään kohdetta, // samoin Java-versio Windowsissa, mutta MacSwiftUI ei saanut tulokseen yhtään riviä. // Macissä piti lisätä Havainnot LEFT JOIN Kohteet.... ja kaikkiin LEFT JOIN sbalku = new StringBuilder(); _ = sbalku.Append("SELECT DISTINCT idKoh, LajiNimi, Nega, Sunimi, "); _ = sbalku.Append("(Suku || ' ' || LatLaji) AS Tieteell_nimi, Pvm, Kuva, "); _ = sbalku.Append("LaatuNimi, Paikkanimi, HavHuom, iKasvi, idHava, KohHuom "); _ = sbalku.Append("FROM ((((((((Havainnot LEFT JOIN Kohteet ON iHava = idHava) "); // UUTTA _ = sbalku.Append("LEFT JOIN Laadut ON Laatu = idLaatu) "); _ = sbalku.Append("LEFT JOIN Lajit ON Laji = idLaji) "); _ = sbalku.Append("LEFT JOIN Kasvit ON iKasvi = idKas) "); _ = sbalku.Append("LEFT JOIN Vanhanimi ON iKas = idKas) "); // UUTTA _ = sbalku.Append("LEFT JOIN Paikat ON iPaikka = idPaikka) "); _ = sbalku.Append("LEFT JOIN Alueet ON iAlue=idAlue) "); _ = sbalku.Append("LEFT JOIN Yleist ON iYleis=idYleis) "); } //----------------------------------------------------------------------- // 30.5.2019 K15 // näytetään alaosassa hakutulos // SQL-lauseke luokkamuuttujina sbalku ja swalku // esiin=true: näytetään datagrid, vaikka ei olisi hakutuloksia // output = false, jos virhe tai jos ei tuloksia // mita = KAIKKI: kaikki tiedot haetaan kannasta ja näyttö päivitetään // = idKoh: yksi tai useampi rivi korjataan ajan tasalle private bool TeeHakuKohteet(int mita) { bool virhe = false; int kpluu = 0; // montako uutta SQLiteCommand kome = null; SQLiteDataReader rdr = null; StringBuilder sqb = new(); // SQL-lauseen kokoaminen List<int> havat = new(); // tähän kerätään havainnot, tarvitaan vain lukumäärä if (mita == KAIKKI) { // ensin tyhjennetään mahdollinen vanha data dgHakutulos.ItemsSource = null; dgHakutulos.Items.Refresh(); tulostaulu.Clear(); koht = new List<int>(); // tähän kerätään idKoh _ = sqb.Append($"{sbalku}WHERE ({swalku}) "); } else { _ = sqb.Append($"{sbalku}WHERE ((idHava = {mita}) AND {swalku}) "); } _ = sqb.Append("ORDER BY Sunimi, Tieteell_nimi, Pvm"); string sqz = sqb.ToString(); try { kome = new SQLiteCommand(sqz, conlite); rdr = kome.ExecuteReader(); while (rdr.Read()) { // SELECT idKoh, LajiNimi, Nega, Sunimi, Tieteell_nimi, Pvm, Kuva, // LaatuNimi, Paikkanimi, HavHuom, iKasvi, idHava, KohHuom "); string havhuz = rdr.IsDBNull(9) ? "" : rdr.GetString(9).KorvaaTabLF(); string kohuz = rdr.IsDBNull(12) ? "" : rdr.GetString(12).KorvaaTabLF(); Havakohrivi hav = new() { IDkoh = rdr.IsDBNull(0) ? EIOO : rdr.GetInt32(0), Lajiz = rdr.IsDBNull(1) ? "" : rdr.GetString(1).KorvaaTabLF(), Negaz = rdr.IsDBNull(2) ? "" : rdr.GetString(2).KorvaaTabLF(), Sunimiz = rdr.IsDBNull(3) ? "" : rdr.GetString(3).KorvaaTabLF(), Tietnimiz = rdr.IsDBNull(4) ? "" : rdr.GetString(4).KorvaaTabLF(), Pvmz = rdr.IsDBNull(5) ? "" : rdr.GetString(5).KorvaaTabLF(), Polkuz = rdr.IsDBNull(6) ? "" : rdr.GetString(6).KorvaaTabLF().KorjaaKenot(2), Laatuz = rdr.IsDBNull(7) ? "" : rdr.GetString(7).KorvaaTabLF(), Paikz = rdr.IsDBNull(8) ? "" : rdr.GetString(8).KorvaaTabLF(), Lisaz = havhuz + " " + kohuz, IDkas = rdr.IsDBNull(10) ? EIOO : rdr.GetInt32(10), IDhava = rdr.IsDBNull(11) ? EIOO : rdr.GetInt32(11) }; if (mita == KAIKKI) { tulostaulu.Add(hav); koht.Add(hav.IDkoh); if (!havat.Contains(hav.IDhava)) { havat.Add(hav.IDhava); } } else // kirjoitetaan päivitetyt tiedot vanhan päälle { // tässä käsitellään muutettu rivi // etsitään tulostaulusta rivi jossa oikea IDkoh foreach (Havakohrivi item in dgHakutulos.Items) // etsitään rivi { if (item.IDhava == mita && item.IDkoh == hav.IDkoh) { item.Lajiz = hav.Lajiz; item.Negaz = hav.Negaz; item.Sunimiz = hav.Sunimiz; item.Tietnimiz = hav.Tietnimiz; item.Pvmz = hav.Pvmz; item.Polkuz = hav.Polkuz; item.Laatuz = hav.Laatuz; item.Paikz = hav.Paikz; item.Lisaz = hav.Lisaz; item.IDkas = hav.IDkas; break; } } } } } catch (Exception ex) { Meka.Virhe2("K15-03", $"{sqz}\nDataa ei saatu ladattua.", ex); virhe = true; } finally { if (rdr != null) { rdr.Close(); } if (kome != null) { kome.Dispose(); } } if (virhe == true) { labelDgridotsa.Content = "Tuloksia ei saatu"; return false; } if (mita == KAIKKI) { if (tulostaulu.Count > 0) { dgHakutulos.ItemsSource = tulostaulu; dgHakutulos.SelectedItem = dgHakutulos.Items[0]; } else { dgHakutulos.ItemsSource = null; labelDgridotsa.Content = "0 havaintoa"; _ = MessageBox.Show("Ei ole yhtään ehdot täyttävää havaintoa", "(K15-05) Ilmoitus"); return false; } string az = (havat.Count == 1) ? "1 havainto, jossa" : $"{havat.Count} havaintoa, joissa"; string bz = (tulostaulu.Count == 1) ? "1 kohde" : $"{tulostaulu.Count} kohdetta"; labelDgridotsa.Content = $"{az} {bz}"; } else // yliviivataan poistetut tiedot { // verrataan koht ja koht2 (idKohde) // koht on viimeksi KAIKKI jolloin luettelo tehty kannan mukaiseksi // koht2 on ne mitkä löytyi nyt kun käyttäjä palasi muokkaamisesta // jos koht-id ei löydy koht2:sta, merkitään se poistetuksi List<int> koht2 = HaekaikkiID(); foreach (int idi in koht) { if (!koht2.Contains(idi)) { foreach (Havakohrivi item in dgHakutulos.Items) // etsitään rivi { if (item.IDkoh == idi) { item.Lajiz = "---"; item.Negaz = "---"; item.Sunimiz = "KOHDE"; item.Tietnimiz = "POISTETTU"; item.Pvmz = "---"; item.Polkuz = "---"; item.Laatuz = "---"; item.Paikz = "---"; item.Lisaz = "---"; item.IDkas = EIOO; item.IDkoh = EIOO; break; } } } } kpluu = 0; // montako uutta kohdetta foreach (int idi in koht2) { if (!koht.Contains(idi)) { kpluu++; } } } dgHakutulos.Items.Refresh(); // tarpeen tässä, koska on voitu päivittää yksittäistä riviä if (mita == KAIKKI && tulostaulu.Count > 5) // tämän oltava lopussa, jolloin data valmiina { dgHakutulos.ScrollIntoView(dgHakutulos.Items[0]); // skrollataan eka rivi esille } _ = dgHakutulos.Focus(); if (kpluu > 0) { _ = MessageBox.Show("Kohteita lisätty, luettelo ei päivity itsestään.", "(K15-07) Ilmoitus"); } return true; } //----------------------------------------------------------------------- // 31.1.2021 K22 // Tehdään luettelo ehdon täyttävistä kohteista private List<int> HaekaikkiID() { bool virhe = false; SQLiteCommand kome = null; SQLiteDataReader rdr = null; List<int> koh = new(); // tähän kerätään kohde-iideet StringBuilder sqb = new(); _ = sqb.Append($"{sbalku}WHERE ({swalku}) "); string sqz = sqb.ToString(); try { kome = new SQLiteCommand(sqz, conlite); rdr = kome.ExecuteReader(); while (rdr.Read()) { // SELECT idKoh ... int idkoh = rdr.IsDBNull(0) ? EIOO : rdr.GetInt32(0); koh.Add(idkoh); } } catch (Exception ex) { Meka.Virhe2("K22-03", $"{sqz}\nTiedon haku epäonnistui.", ex); virhe = true; } finally { if (rdr != null) { rdr.Close(); } if (kome != null) { kome.Dispose(); } } if (virhe) { return null; } return koh; } //----------------------------------------------------------------------- // 3.10.2021 K14 // HAE_painikkeen painaminen, tehdään hakutulos private void BtnHae_Click(object sender, RoutedEventArgs e) { if (!int.TryParse(textIDhav.Text.OmaTrim(), out int idha)) { idha = EIOO; } if (!int.TryParse(textIDkoh.Text.OmaTrim(), out int idkoh)) { idkoh = EIOO; } // Jos on annettu molemmat id-arvot, ei kelpaa if (idha != EIOO && idkoh != EIOO) { _ = MessageBox.Show("Vain jompikumpi: idHava tai idKoh", "(K14-04) Ilmoitus"); return; } // Jos on annettu tietoa kenttään idHav tai idKoh, // kaikki muut kentät tyhjennetään, // ja esille haetaan suoraan havainto idHav (tai idKoh:n havainto), // eikä taulukkoon laiteta mitään if (idha != EIOO || idkoh != EIOO) { TyhjaaKentat(); int kumpi = (idha != EIOO) ? HAVAINTO : KOHDE; int idi = (idha != EIOO) ? idha : idkoh; if (idha != EIOO) { textIDhav.Text = idha.ToString(); } else { textIDkoh.Text = idkoh.ToString(); } int itu; Kaikikku ikku = new(conlite, isanat, idi, kumpi) { Owner = Application.Current.MainWindow }; if (ikku.Mode == EIOO) { return; // ikku-luokan muodostimessa oli this.Close() } bool? result = ikku.ShowDialog(); // modaalinen if (result.HasValue) { itu = ikku.Kantamuutos; } else { _ = MessageBox.Show("Virhetilanne, ikkunasta ei tulosta", "(K14-06) Ilmoitus"); return; } if (itu == MUUTOS) { Kantamuutos = MUUTOS; } } else { if (TeeWhere(VILLI)) { _ = TeeHakuKohteet(KAIKKI); } } } //----------------------------------------------------------------------- // 13.6.2020 K07 // käyttäjä painoi Tyhjennä -painiketta private void BtnTyhjenna_Click(object sender, RoutedEventArgs e) { TyhjaaKentat(); labelDgridotsa.Content = "Hakutulos 0 kpl"; } //----------------------------------------------------------------------- // 12.5.2021 K18 // tyhjennetään kentät ja hakutulos, paitsi kenttää idHava private void TyhjaaKentat() { checkBoxEpaselva.IsChecked = false; textNega.Clear(); textAika2.Clear(); textAika1.Clear(); textTiet.Clear(); textPaikka.Clear(); textSunimi.Clear(); textIDhav.Clear(); textIDkoh.Clear(); _ = textSunimi.Focus(); textHeimo.Clear(); comboAlue.SelectedIndex = -1; comboYleis.SelectedIndex = -1; comboLaji.SelectedIndex = -1; comboLaatu.SelectedIndex = -1; textFaili.Clear(); // tyhjennetään hakutuloksen nykyiset rivit dgHakutulos.ItemsSource = null; dgHakutulos.Items.Refresh(); tulostaulu.Clear(); } //----------------------------------------------------------------------- // 3.10.2021 K05 // Tässä näytetään rivillä valittuna oleva kohde ja havainto private void BtnNayta_Click(object sender, RoutedEventArgs e) { if (tulostaulu.Count == 0) { return; } Havakohrivi dsele = (Havakohrivi)dgHakutulos.SelectedItem; int idKoh = (dsele != null) ? dsele.IDkoh : EIOO; int idHava = (dsele != null) ? dsele.IDhava : EIOO; if (idKoh == EIOO) { _ = MessageBox.Show("Valitse ensin jokin rivi!", "(K05-01) Opastus"); return; } int itu; Kaikikku ikku = new(conlite, isanat, idKoh, KOHDE) { Owner = Application.Current.MainWindow }; if (ikku.Mode == EIOO) { return; // ikku-luokan muodostimessa oli this.Close() } bool? result = ikku.ShowDialog(); // modaalinen if (result.HasValue) { itu = ikku.Kantamuutos; } else { _ = MessageBox.Show("Virhetilanne, ikkunasta ei tulosta", "(K05-06) Ilmoitus"); return; } if (itu == MUUTOS) { Kantamuutos = MUUTOS; _ = TeeHakuKohteet(idHava); } } //----------------------------------------------------------------------- // 3.10.2021 K06 // käyttäjä haluaa tehdä uuden havainnon private void BtnUusi_Click(object sender, RoutedEventArgs e) { int itu = EIOO; int idi = EIOO; Kaikikku ikku = new(conlite, isanat, EIOO, HAVAINTO) { Owner = Application.Current.MainWindow }; if (ikku.Mode == EIOO) { return; // ikku-luokan muodostimessa oli this.Close() } bool? result = ikku.ShowDialog(); // modaalinen if (result.HasValue) { if (ikku.Kantamuutos == MUUTOS) { Kantamuutos = MUUTOS; itu = MUUTOS; } if (result.Value) // ikkunasta poistuttiin normaalisti (DialogResult = true) { idi = ikku.Ihavauus; // tehdyn uuden havainnon idHava } } else { _ = MessageBox.Show("Virhetilanne, ikkunasta ei tulosta", "(K06-01) Ilmoitus"); return; } if (idi == EIOO) { return; } if (itu == MUUTOS) { TyhjaaKentat(); _ = MessageBox.Show("Uusi havainto tehty, idHava=" + idi, "(K06-03) Ilmoitus"); } } //----------------------------------------------- // 20.4.2017 K13 private void BtnSulje_Click(object sender, RoutedEventArgs e) { Lopetus(); } //----------------------------------------------- // 3.10.2021 K08 // Tänne tullaan, jos tuli komento this.Close() // tänne tullaan myös jos käyttäjä klikkaa punaista ruksia // mode = EIOO (luokan muodostajassa oli this.Close()), // OOKOO (DialogResult = true/false) private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { if (Mode != EIOO && Mode != OOKOO) { Lopetus(); } } //----------------------------------------------- // 3.10.2021 K17 // tänne tuo suoraan ButtonPeruuta() ja // Window_Closingin kautta oikean ylänurkan ruksaus private void Lopetus() { // tänne lopetusjuttuja Mode = OOKOO; // ohitetaan Lopetus() jonne Window_Closing vie DialogResult = false; } //----------------------------------------------------------------------- // 3.10.2021 K19 // Käyttäjä haluaa nähdä pikkukuvat private void BtnRyhma_Click(object sender, RoutedEventArgs e) { if (tulostaulu.Count == 0) { _ = MessageBox.Show("Ei yhtään kasvia!", "(K19-01) Opastus"); return; } List<Kuvainfo> kuvasto = new(); foreach (Havakohrivi hkoh in tulostaulu) { if (hkoh.Polkuz.IsEmpty()) { continue; } string uuz = Meka.AnnaOikeapolku($"{kuvapolkuz}\\{hkoh.Polkuz}", isanat); if (uuz.IsEmpty()) { continue; } Kuvainfo kux = new() { IDkoh = hkoh.IDkoh, IDkas = hkoh.IDkas, Sunimiz = hkoh.Sunimiz, Polkuz = uuz, Pvmz = hkoh.Pvmz, Lajiz = hkoh.Lajiz, Laatuz = hkoh.Laatuz, Paikkaz = hkoh.Paikz }; kuvasto.Add(kux); } if (kuvasto.Count == 0) { _ = MessageBox.Show("Ei yhtään kasvia joista olisi kuva!", "(K19-06) Ilmoitus"); return; } Kuvamatriisi ikku = new(conlite, isanat, kuvasto) { Owner = Application.Current.MainWindow }; if (ikku.Mode == EIOO) { return; // Tokaikku-luokan muodostimessa oli this.Close() } bool? result = ikku.ShowDialog(); // modaalinen if (result.HasValue) { if (ikku.Kantamuutos == MUUTOS) { Kantamuutos = MUUTOS; } } else { _ = MessageBox.Show("Virhetilanne, ikkunasta ei tulosta", "(K19-09) Ilmoitus"); return; } } //----------------------------------------------------------------------- // 3.10.2021 K02 // Hakuehtoja vastaavan SQL-lausekkeen kokoaminen -> ehtoz // modpai = TARKKA tai VILLI, paikkaehdon tarkkuus (jos yksi kirjain ehto on k*) // output=true: kaikki ok, hakuehdoissa ei virheitä // false: jotain mätää, käyttäjä saa ilmoituksen private bool TeeWhere(int modpai) { string z; int iWhere = 0; // montako WHERE-ehtoa bool ehtojaon = false; // onko annettu ehtoja lainkaan string sunimi = textSunimi.Text.OmaTrim(); // kerätään hakuehtotekstit string latnimi = textTiet.Text.OmaTrim(); string heimoz = textHeimo.Text.OmaTrim(); string aika1 = textAika1.Text.OmaTrim(); string aika2 = textAika2.Text.OmaTrim(); string nega = textNega.Text.OmaTrim(); string tiedosto = textFaili.Text.OmaTrim(); if (tiedosto.IndexOf("'") != -1) { _ = MessageBox.Show("Tiedostonimessä ei saa olla hipsua", "(K02-01) Ilmoitus"); return false; } string paikkaz = textPaikka.Text.OmaTrim(); if (sunimi != "" || latnimi != "" || heimoz != "" || aika1 != "" || aika2 != "" || nega != "" || paikkaz != "" || tiedosto != "") { ehtojaon = true; } object hsele = comboAlue.SelectedItem; string aluez = (hsele != null) ? ((Combocoll)hsele).Nimiz : ""; hsele = comboLaji.SelectedItem; string lajiz = (hsele != null) ? ((Combocoll)hsele).Nimiz : ""; hsele = comboLaatu.SelectedItem; string laatuz = (hsele != null) ? ((Combocoll)hsele).Nimiz : ""; object ysele = comboYleis.SelectedItem; int idyleis = (ysele != null) ? ((Combocoll)ysele).Nro : EIOO; // yleisyyden numero if (!ehtojaon) { if (heimoz != "" || aluez != "" || lajiz != "" || laatuz != "" || idyleis != EIOO) { ehtojaon = true; } } if (!ehtojaon) { if (checkBoxEpaselva.IsChecked == true) { ehtojaon = true; } } if (!ehtojaon) { _ = MessageBox.Show("Hakuehtoja ei ole annettu!", "(K02-02) Ilmoitus"); return false; } swalku = new StringBuilder(""); // WHERE-osa // SELECT-osa on tehty luokkamuuttujaan sbalku // Havainnon id: tätä ei tarvitse tutkia koska jo buttonHae (K14) tutkii tämän if (checkBoxEpaselva.IsChecked == true) { z = (iWhere == 0) ? "(Epaselva = 1)" : " AND (Epaselva = 1)"; _ = swalku.Append(z); iWhere++; } if (aluez != "") { z = (iWhere > 0) ? " AND" : ""; z += $"(Aluenimi = '{aluez}')"; _ = swalku.Append(z); iWhere++; } if (paikkaz != "") { z = (iWhere > 0) ? " AND" : ""; // skandien variointi LIKE-ehdossa: string ehz = Meka.TeeSQLvario(paikkaz.Hipsut(), "Paikkanimi", 0); // ei % string eh1z = Meka.TeeSQLvario(paikkaz.Hipsut(), "Paikkanimi", 1); // ..% string eh3z = Meka.TeeSQLvario(paikkaz.Hipsut(), "Paikkanimi", 3); // %..% if (ehz.IsEmpty() || eh1z.IsEmpty() || eh3z.IsEmpty()) { return false; } if (paikkaz.Length == 1) // yksi merkki, haku paikkanimen alusta { z += $"({eh1z})"; } else if (modpai == TARKKA) { z += $"({ehz})"; } else { z += $"({eh3z})"; } _ = swalku.Append(z); iWhere++; } if (tiedosto != "") { z = (iWhere > 0) ? " AND" : ""; // skandien variointi LIKE-ehdossa: string ehz = Meka.TeeSQLvario(tiedosto, "REPLACE(Kuva, '/', '\\')", 3); // %..% if (ehz.IsEmpty()) { return false; } z += $"({ehz})"; _ = swalku.Append(z); iWhere++; } // TODO: muokattava rakenne siten, että tässä ei oteta laatuz eikä lajiz vaan vastaavat ilaatu ja ilaji // katso miten se on tehty Macissä; myös heimoz / iheimo (ei enää iheimo) if (laatuz != "") { z = (iWhere > 0) ? " AND" : ""; // skandien variointi LIKE-ehdossa: string ehz = Meka.TeeSQLvario(laatuz.Hipsut(), "LaatuNimi", 0); // ei % if (ehz.IsEmpty()) { return false; } z += $"({ehz})"; _ = swalku.Append(z); iWhere++; } if (lajiz != "") { z = (iWhere > 0) ? " AND" : ""; // skandien variointi LIKE-ehdossa: string ehz = Meka.TeeSQLvario(lajiz.Hipsut(), "LajiNimi", 0); // ei % if (ehz.IsEmpty()) { return false; } z += $"({ehz})"; _ = swalku.Append(z); iWhere++; } if (heimoz != "") { z = (iWhere > 0) ? " AND" : ""; // skandien variointi LIKE-ehdossa: TODO: ei heimonimessä ole skandeja string ehz = Meka.TeeSQLvario(heimoz.Hipsut(), "Heimo", 3); // %..% if (ehz.IsEmpty()) { return false; } z += $"(({ehz})"; _ = swalku.Append(z); iWhere++; _ = swalku.Append($" OR ( Vnimi LIKE '%{heimoz.Hipsut()}%' AND Mika='Heimo')) "); } string ekaz, tokaz; string tz = ""; bool pvmhoidettu = false; if (aika1.IndexOf("'") != EIOO || aika2.IndexOf("'") != EIOO) { _ = MessageBox.Show("Päivämäärissä ei saa olla hipsua", "(K02-05) Ilmoitus"); return false; } // aika1 = "*.5.1999", "*.*.1999", "*.5.*" ja aika2 on tyhjä if (aika1 != "" && aika2 == "") { if (aika1.StartsWith("*.*.") && aika1.Length == 8) { string vuosiz = aika1[4..]; tz = $"(strftime('%Y', Pvm)='{vuosiz}') "; pvmhoidettu = true; } // *.5.* tai *.11.* else if (aika1.StartsWith("*.") && aika1.EndsWith(".*") && (aika1.Length == 5 || aika1.Length == 6)) { string kuz = aika1[2..^2]; // "5" tai "11" Substring(2, aika1.Length - 4) if (kuz.Length == 1) { kuz = "0" + kuz; } tz = $"(strftime('%m', Pvm)='{kuz}') "; pvmhoidettu = true; } // *.5.1999 tai *.10.1999 else if (aika1.StartsWith("*.") && (aika1.Length == 8 || aika1.Length == 9)) { ekaz = ("1." + aika1[2..]).PvmKorjaa(VIIVAT); // "1999-05-01" string vkz = ekaz[..7]; tz = $"(strftime('%Y-%m', Pvm)='{vkz}') "; pvmhoidettu = true; } if (pvmhoidettu) { z = (iWhere > 0) ? $" AND {tz}" : tz; iWhere++; _ = swalku.Append(z); } } // Käsitellään onko pvm-kentissä esimerkiksi 10.4 ja 20.4 ilman vuosilukua // 10.4.* käy myös, oltava molemmat if (aika1 != "" && aika2 != "" && pvmhoidettu == false) { ekaz = aika1.PvmKorjaa(VIIVAT); tokaz = aika2.PvmKorjaa(VIIVAT); if (ekaz == "" && tokaz == "") // ainakaan eivät ole oikeassa muodossa? { if (aika1.EndsWith(".*")) { aika1 = aika1[0..^2]; // aika1.Substring(0, aika1.Length - 2); } if (aika2.EndsWith(".*")) { aika2 = aika2[0..^2]; } z = aika1 + ".2000"; ekaz = z.PvmKorjaa(VIIVAT); // ovatko ne oikein vuosiluvun kanssa? z = aika2 + ".2000"; tokaz = z.PvmKorjaa(VIIVAT); if (ekaz != "" && tokaz != "") // jos olivat oikein, niin jatketaan { ekaz = ekaz[5..]; // otetaan loppuosa esim. '04-10' tokaz = tokaz[5..]; string sz = (iWhere > 0) ? " AND " : ""; sz += $"(strftime('%m-%d', Pvm)>='{ekaz}' AND strftime('%m-%d', Pvm)<='{tokaz}') "; pvmhoidettu = true; iWhere++; _ = swalku.Append(sz); } } } // Käsitellään onko alkupvm-kentässä esimerkiksi 10.4 tai 10.4.* ilman vuosilukua if (aika1 != "" && aika2 == "" && pvmhoidettu == false) { ekaz = aika1.PvmKorjaa(VIIVAT); if (ekaz == "") // ainakaan ei ole oikeassa muodossa? { if (aika1.EndsWith(".*")) { aika1 = aika1[0..^2]; // aika1.Substring(0, aika1.Length - 2); } z = aika1 + ".2000"; ekaz = z.PvmKorjaa(VIIVAT); // ovatko ne oikein vuosiluvun kanssa? if (ekaz != "") // jos olivat oikein, niin jatketaan { ekaz = ekaz[5..]; // otetaan loppuosa esim. '04-10' z = (iWhere > 0) ? " AND " : ""; z += $"(strftime('%m-%d', Pvm)='{ekaz}') "; pvmhoidettu = true; iWhere++; _ = swalku.Append(z); } } } if (!pvmhoidettu) { if (aika1 == "" && aika2 != "") { aika1 = aika2; aika2 = ""; } if (aika1 != "" || aika2 != "") { if (aika1 != "") { ekaz = aika1.PvmKorjaa(VIIVAT); if (ekaz == "") { _ = MessageBox.Show("Löytöajan alkukohta on väärin", "(K02-06) Anna kunnollinen päivämäärä"); return false; } else { if (aika2 != "") { tokaz = aika2.PvmKorjaa(VIIVAT); if (tokaz == "") { _ = MessageBox.Show("Löytöajan loppukohta on väärin", "(K02-07) Anna kunnollinen päivämäärä"); return false; } else if (string.Compare(ekaz, tokaz) > 0) { _ = MessageBox.Show("Löytöajan loppukohta < alkukohta", "(K02-08) Virhe annetuissa tiedoissa"); return false; } else { z = (iWhere > 0) ? " AND" : ""; z += $"(Pvm <= '{tokaz}') AND (Pvm >= '{ekaz}') "; iWhere++; } } else { z = (iWhere > 0) ? " AND" : ""; z += $"(Pvm = '{ekaz}') "; iWhere++; } _ = swalku.Append(z); } } } } if (nega != "") { z = (iWhere > 0) ? " AND" : ""; // skandien variointi LIKE-ehdossa: string ehz = Meka.TeeSQLvario(nega.Hipsut(), "Nega", 1); // ..% if (ehz.IsEmpty()) { return false; } z += $"({ehz})"; iWhere++; _ = swalku.Append(z); } if (sunimi != "") { z = (iWhere > 0) ? " AND" : ""; string ehz = Meka.TeeSQLvario(sunimi.Hipsut(), "Sunimi", 3); // %..% string eh2z = Meka.TeeSQLvario(sunimi.Hipsut(), "Kaksois", 3); // %..% if (ehz.IsEmpty() || eh2z.IsEmpty()) { return false; } _ = swalku.Append(z + $"(({ehz} OR {eh2z})"); iWhere++; string eh3z = Meka.TeeSQLvario(sunimi.Hipsut(), "Vnimi", 3); // %..% // UUTTA if (eh3z.IsEmpty()) { return false; } _ = swalku.Append($" OR ({eh3z} AND Mika='SuomNimi')) "); } if (latnimi != "") { z = (iWhere > 0) ? " AND" : ""; z += $"((Suku || ' ' || LatLaji LIKE '%{latnimi.Hipsut()}%' )"; // ei skandiongelmaa LIKE-lauseessa _ = swalku.Append(z); iWhere++; _ = swalku.Append($" OR ( Vnimi LIKE '%{latnimi.Hipsut()}%' AND Mika='TietNimi')) "); // UUTTA } if (idyleis != EIOO) // Yleisyys { z = (iWhere > 0) ? " AND " : ""; z += $"(iYleis = {idyleis})"; iWhere++; _ = swalku.Append(z); } return true; } } }
ybzsozfc

ybzsozfc3#

感谢@erkkifromdeepforest提供的额外信息。截图没有通过,因为它们不能通过电子邮件工作。如果手动上传它们,它们将正常工作,请参考#134588
以下是发生的情况:

  • 当你按下cmd+c时,vscode以两种不同的格式将内容写入剪贴板:纯文本和HTML
  • 你选择的源代码以纯文本形式写入
  • 你选择的源代码也以HTML(添加语法颜色)的形式写入,其中标签被相应的空格数替换,以便对齐内容
  • 在粘贴到BBEdit时,看起来像是从剪贴板读取了纯文本数据。
  • 在粘贴到Word时,看起来像是从剪贴板读取了HTML数据。

我认为你应该想要一种方法来配置vscode,使其将制表符以原始格式写入HTML剪贴板。

toe95027

toe950274#

你好!这里有两个关于类似情况的更多示例。当我使用cmd+c和cmd+v复制文本时,会发生以下情况:

  • 在Xcode(Mac)中使用cmd-c和在Word中使用cmd-V:制表符没有被空格替换,但语法着色被复制
  • 在Visual Studio(Windows 10)中使用cmd-c和在Word中使用cmd-V:制表符没有被空格替换,但语法着色被复制

所以在这个编辑器家族(Xcode、Visual Studio、Code)中,Code的行为是不同的。当然,它应该以相同的方式表现。

最好的祝愿,
Erkki Ahola Lähettäjä
Alexandru Dima ***@***.***>
Lähetetty: maanantai 11. lokakuuta 2021 9.38 Vastaanottaja: microsoft/vscode ***@***.***> Kopio: erkkifromdeepforest ***@***.***>; Mention ***@***.***> Aihe: Re: [microsoft/vscode] 从Code复制粘贴到Word (#134588)
感谢@erkkifromdeepforest< https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Ferkkifromdeepforest&data=04%7C01%7C%7C2bf6b1b161994fda382a08d98c81b8b1%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637695311043523421%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=wtZN5ZqHu0i7P8sTR2PPPMmRWibagoOv3zjxEpVSuds%3D&reserved=0 >提供的额外信息。截图没有通过邮件发送过来,因为它们在电子邮件上无法工作。如果你们手动上传,它们是可以工作的。这里是发生的情况:

  • 当按下cmd+c时,vscode以两种不同的格式将内容写入剪贴板:纯文本和HTML * 你选择的源代码以纯文本形式写入剪贴板 * 你选择的源代码也被写为HTML(以添加语法颜色),在其中制表符被相应的空格数替换以对齐内容 * 在粘贴到BBEdit时,看起来像是BBEdit从剪贴板读取了纯文本数据。 * 在粘贴到Word时,看起来像是Word从剪贴板读取了HTML数据。我认为你应该想要一种方法来配置vscode,使其将制表符以HTML格式写入剪贴板。
b4wnujal

b4wnujal5#

Here are the files which I have earlier tried to send in email.

$Code to Word.png$ Text copied using clipboard (Mac)

$Kohdehaku.xaml.cs$ The text in the preceding image

$Xcode to Word.png$ Text copied (Mac) from Xcode using clipboard

$Visual Studio to Word.PNG$ Text copied (Windows) from Visual Studio using clipboard

Regards, Erkki Ahola

hwamh0ep

hwamh0ep6#

作为参考,这里是xcode为代码创建的内容:

//
//  ContentView.swift
//  Shared
//
//  Created by Alex on 10/14/21.
//

import SwiftUI

struct ContentView: View {
	var body: some View {
		Text("Hello, world!")
			.padding()
	}
}

struct ContentView_Previews: PreviewProvider {
	static var previews: some View {
		ContentView()
	}
}
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<title></title>
<meta name="Generator" content="Cocoa HTML Writer">
<meta name="CocoaVersion" content="2022.6">
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #5d6c79; background-color: #ffffff}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #000000; color: rgba(0, 0, 0, 0.85); background-color: #ffffff; min-height: 14.0px}
p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #000000; color: rgba(0, 0, 0, 0.85); background-color: #ffffff}
p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #0b4f79; background-color: #ffffff}
p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #c41a16; background-color: #ffffff}
p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #9b2393; background-color: #ffffff}
span.s1 {color: #9b2393}
span.s2 {color: rgba(0, 0, 0, 0.85)}
span.s3 {color: #0f68a0}
span.s4 {color: #0b4f79}
span.Apple-tab-span {white-space:pre}
</style>
</head>
<body>
<p class="p1">//</p>
<p class="p1">//<span class="Apple-converted-space">&nbsp; </span>ContentView.swift</p>
<p class="p1">//<span class="Apple-converted-space">&nbsp; </span>Shared</p>
<p class="p1">//</p>
<p class="p1">//<span class="Apple-converted-space">&nbsp; </span>Created by Alex on 10/14/21.</p>
<p class="p1">//</p>
<p class="p2"><br></p>
<p class="p3"><span class="s1"><b>import</b></span> SwiftUI</p>
<p class="p2"><br></p>
<p class="p4"><span class="s1"><b>struct</b></span><span class="s2"> </span>ContentView<span class="s2">: View {</span></p>
<p class="p3"><span class="Apple-tab-span">	</span><span class="s1"><b>var</b></span> <span class="s3">body</span>: <span class="s1"><b>some</b></span> View {</p>
<p class="p5"><span class="s2"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span>Text(</span>"Hello, world!"<span class="s2">)</span></p>
<p class="p3"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span>.padding()</p>
<p class="p3"><span class="Apple-tab-span">	</span>}</p>
<p class="p3">}</p>
<p class="p2"><br></p>
<p class="p3"><span class="s1"><b>struct</b></span> <span class="s4">ContentView_Previews</span>: PreviewProvider {</p>
<p class="p6"><span class="s2"><span class="Apple-tab-span">	</span></span><b>static</b><span class="s2"> </span><b>var</b><span class="s2"> </span><span class="s3">previews</span><span class="s2">: </span><b>some</b><span class="s2"> View {</span></p>
<p class="p3"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span>ContentView()</p>
<p class="p3"><span class="Apple-tab-span">	</span>}</p>
<p class="p3">}</p>
</body>
</html>

相关问题